2016-08-25 7 views
2

私は依存関係を記述するルートAppModuleを持っています。私は@InjectableJwtLocalStorageを持っています。 をtokenGetterとしてprovideAuth()に渡すにはどうすればいいですか?出来ますか?私はそれのために何をすべきですか?NgModuleでインスタンス化された依存関係を使用

app.module.ts

@NgModule({ 
    // ... 
    providers: [ 
     // ... 
     provideAuth({ 
      tokenGetter:() => JSON.parse(localStorage.getItem(TASK_DI_CONFIG.jwtName)), 
     }), 
     { provide: APP_CONFIG, useValue: TASK_DI_CONFIG }, 
     { provide: JwtStorage, useClass: JwtLocalStorage } 
    ], 
    bootstrap: [ 
     AppComponent 
    ] 
}) 
export class AppModule { 

} 

JWT-ローカルstorage.ts

@Injectable() 
export class JwtLocalStorage implements JwtStorage { 
    constructor(
     @Inject(APP_CONFIG) private config: AppConfig 
    ) { 

    } 

    getToken() { 
     return JSON.parse(localStorage.getItem(this.config.jwtName)); 
    } 
    // ... 
} 

P.S.私は角を使用しています2.0.0-rc.5

+0

「私はprovideAuthでtokenGetter()としてJwtLocalStorage.prototype.getTokenを()を渡すことができますか」のように見えます。正確にあなたはどこに行きたいですか? –

+0

@GünterZöchbauer 'JwtLocalStorage'クラスの' getToken() 'メソッドを' provideAuth() 'ヘルパー関数に' tokenGetter'プロパティとして渡したいと思います。今のところ私は 'AppModule'に' getToken() 'の実装を重複しています。 – user1636505

+0

私は今、理解していると思いますが、考えはありません。あなたはカスタムの 'provideAuth()'メソッドを使うことも、メソッドの内容をモジュールプロバイダに直接コピーすることもできますが、それは劣化のようです –

答えて

0

私はservice factoryを使ってこの問題を解決しました。 ソリューションは、私は本当に理解していないこの

@NgModule({ 
    // ... 
    providers: [ 
     // ... 
     { 
      provide: AuthHttp, 
      useFactory: (http: Http, jwtStorage: JwtStorage) => { 
       return new AuthHttp(new AuthConfig({ 
        tokenGetter() { 
         return jwtStorage.getToken(); 
        } 
       }), http); 
      }, 
      deps: [Http, JwtStorage] 
     } 
    ] 
}) 
export class MyAwesomeModule { 

} 
関連する問題