Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@NgModule中的依赖项注入不工作Angular2.1.0_Angular_Dependency Injection - Fatal编程技术网

@NgModule中的依赖项注入不工作Angular2.1.0

@NgModule中的依赖项注入不工作Angular2.1.0,angular,dependency-injection,Angular,Dependency Injection,我正在尝试在最新的Angular2 2.1.0中正确设置@NgModule。我有一些依赖于其他可注入代码的可注入代码,由于某种原因,依赖性没有得到初始化 当应用程序启动时,我收到以下错误:core.umd.js:3076 TypeError:无法读取Object.tokenGetter(app.module.ts:68)上未定义的属性“getTokenPromise” 本例中未定义的对象是return unifiedLogin.getTokenPromise()行中的unifiedLogin 我

我正在尝试在最新的Angular2 2.1.0中正确设置@NgModule。我有一些依赖于其他可注入代码的可注入代码,由于某种原因,依赖性没有得到初始化

当应用程序启动时,我收到以下错误:
core.umd.js:3076 TypeError:无法读取Object.tokenGetter(app.module.ts:68)上未定义的属性“getTokenPromise”

本例中未定义的对象是
return unifiedLogin.getTokenPromise()行中的
unifiedLogin

我原以为UnifiedLogin登录会被注入AuthHttp并初始化,但事实并非如此

这是一个相当大的项目,所以我只希望包括相关的代码片段

这是app.modules.ts中有问题的@NgModule语句的一部分

import { BrowserModule } from '@angular/platform-browser';
import { HttpModule, Http } from '@angular/http';
import { AppRoutingModule } from './app-routing.module';
import { AuthHttp, AuthConfig } from 'angular2-jwt';
import { UnifiedLogin } from './unified-login';
import { AppComponent }  from './app.component';

...

@NgModule({
    declarations: [
        AppComponent
    ],
    imports: [
        BrowserModule,
        HttpModule,
        AppRoutingModule
    ],
    providers: [
        UnifiedLogin,
        {
            provide: AuthHttp,
            useFactory: (http: Http, unifiedLogin: UnifiedLogin) => {
                return new AuthHttp(new AuthConfig({
                    tokenGetter: (() => {
                        return unifiedLogin.getTokenPromise();
                    })
                }), http);
            },
            deps: [UnifiedLogin]
        }
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }
下面是我期望初始化并注入AuthHttp的UnifiedLogin代码,但没有

import { Injectable } from '@angular/core';

...

@Injectable()
export class UnifiedLogin {

    ... 

    public getTokenPromise(): Promise<string> {
        return this._storage.get('id_token');
    }   
}
从'@angular/core'导入{Injectable};
...
@可注射()
导出类UnifiedLogin{
... 
公共getTokenPromise():承诺{
返回此。_storage.get('id_令牌');
}   
}

您需要在
deps
中列出在
useFactory
函数中使用的依赖项。由于您只列出
deps:[UnifiedLogin]
,因此
UnifiedLogin
作为第一个参数传递给
useFactory
函数,而第二个参数什么也得不到

您应该将
Http
添加到
deps
中,以便相应地解析参数

{
    provide: AuthHttp,
    useFactory: (http: Http, unifiedLogin: UnifiedLogin) => {
        return new AuthHttp(new AuthConfig({
            tokenGetter: (() => {
                return unifiedLogin.getTokenPromise();
            })
        }), http);
    },
    deps: [Http, UnifiedLogin]   <====== Http
}
{
提供:AuthHttp,
useFactory:(http:http,unifiedLogin:unifiedLogin)=>{
返回新的AuthHttp(新的AuthConfig({
令牌获取者:(()=>{
返回unifiedLogin.getTokenPromise();
})
}),http);
},
deps:[Http,UnifiedLogin]