2016-10-25 4 views
1

最新のAngular2 2.1.0で@NgModuleを正しく設定しようとしています。私は他の注射可能なコードに依存する注射可能なコードをいくつか持っており、何らかの理由で依存が初期化されていません。@NgModuleの依存性注入が機能していませんAngular2 2.1.0

アプリが起動し、私は次のエラーを取得する:このケースでcore.umd.js:3076 TypeError: Cannot read property 'getTokenPromise' of undefined at Object.tokenGetter (app.module.ts:68)

未定義のオブジェクトはラインでunifiedLoginreturn unifiedLogin.getTokenPromise();

である私はUnifiedLoginログインがAuthHttpに注入され、初期化されていたであろうことを期待それそうではありません。

これはかなり大きなプロジェクトであり、私は関連するコードの断片だけを望んでいます。

この

はapp.modules.ts

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コードがあるから問題のある私@NgModule文の部分ですが、

ませんでした
import { Injectable } from '@angular/core'; 

... 

@Injectable() 
export class UnifiedLogin { 

    ... 

    public getTokenPromise(): Promise<string> { 
     return this._storage.get('id_token'); 
    } 
} 

答えて

2

useFactory機能で使用するdepsの依存関係をリストする必要があります。 deps: [UnifiedLogin]しかリストしないので、UnifiedLoginuseFactory関数の最初の引数として渡され、2番目の引数は何も得られません。

あなたはそう引数がそれに応じて

{ 
    provide: AuthHttp, 
    useFactory: (http: Http, unifiedLogin: UnifiedLogin) => { 
     return new AuthHttp(new AuthConfig({ 
      tokenGetter: (() => { 
       return unifiedLogin.getTokenPromise(); 
      }) 
     }), http); 
    }, 
    deps: [Http, UnifiedLogin] <====== Http 
} 
解決され depsHttpを追加する必要があります
関連する問題