2017-03-29 5 views
0

私のAngular 2(v2.4)をブートストラップするとき、アプリケーションがロードされる前に自動的にユーザーを認証する機能を実行しようとしています。しかし、これは動作していないようです。角2:ブートストラップの前にサービスを呼び出す

import {platformBrowserDynamic} from "@angular/platform-browser-dynamic"; 
import {enableProdMode, APP_INITIALIZER} from "@angular/core"; 
import {Http, HttpModule} from "@angular/http"; 
import {PARAMETERS} from "../config/parameters"; 
import {AppModule} from "./AppModule"; 
import {UserRepository} from "../modules/service/repository/UserRepository"; 
import {SessionManager} from "../modules/service/manager/SessionManager"; 


export function auth(userRepository: UserRepository) { 
    console.log("BOOM!"); 
    return() => userRepository.autoAuthorize(); 
}; 

platformBrowserDynamic().bootstrapModule(AppModule, [ 
    { 
     provide: APP_INITIALIZER, 
     useFactory: auth, 
     deps: [UserRepository, SessionManager, HttpModule], 
     multi: true 
    } 
]) 
    .catch(err => console.error(err)); 

私は間違っていますが、どうすればそれを動作させることができますか?また、上記のようなコードがある場合、これらのサービスをAppModuleのプロバイダ配列に追加する必要がありますか?

感謝

JT

答えて

1

それはあなたが既に持っているプロバイダのリストに依存するサービスを追加します。コンパイラオプションのための

... 
platformBrowserDynamic().bootstrapModule(AppModule, { 
    providers: [ UserRepository, SessionManager, HttpModule, 
    { 
     provide: APP_INITIALIZER, 
     useFactory: auth, 
     deps: [UserRepository, SessionManager, HttpModule], 
     multi: true 
    } 
]}); 
... 

https://github.com/angular/angular/blob/4.0.0/packages/core/src/linker/compiler.ts#L90-L109

は、あなたがそれにプロバイダを持つオブジェクトを提供します。これは、工場で使用したいクラスを理解してコンパイルする必要があります。

これは、ブートストラップコンパイラオプションの代わりに、プロバイダモジュールのappmoduleで行うこともできます。

関連する問題