2016-09-06 8 views
1

グローバルプロバイダを1回だけ初期化することはできますか? だから私は、次のプロバイダ角2 RC 5グローバルプロバイダ

@Injectable() 
export class ApiRequest { 

    http: Http; 
    constructor(@Inject(Http) http) { 
     console.log('Test'); 
    } 
} 

して、共有モジュール

@NgModule({ 
    imports: [BrowserModule, 
     HttpModule], 
    declarations: [ControlMessage, InfiniteScroll], 
    entryComponents: [ControlMessage], 
    providers: [ApiRequest], 
    exports: [ControlMessage, InfiniteScroll], 
}) 

コードが動作しているエクスポートクラスのSharedModule {

static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: SharedModule, 
     providers: [ApiRequest] 
    }; 
} 

を持って、ここでの問題は、ということApiRequestコンストラクタです私はルートを変更するたびに初期化されるので、各ページが変更されます。 ApiRequestプロバイダをアプリケーション全体で一度だけ初期化するにはどうすればよいですか?

+0

モジュールのようなサウンドは遅延ロードされています。この場合、 'forRoot()'を実装する必要があります。https://angular.io/docs/ts/latest/guide/ngmodule.html、https://angular.io/docs/ts/latest/cookbook/rc4- to-rc5.html –

+0

@GünterZöchbauerもそうした。同じ問題。 forRootを使用する質問を編集 – keepwalking

+0

私はそのような問題を見たと思います。それはマスターで修正され、次のリリースに含まれるべきです。 –

答えて

0

ここでの問題は、私がサブモジュールでプロバイダを宣言していたことです。私はまだ各注入時に初期化中のサブモジュールでのみプロバイダを使用していました。だから私はそれをメインモジュールで宣言しなければならず、期待通りに動作します。

+0

これは、モジュールが遅延ロードされている場合にのみ問題になります。 http://stackoverflow.com/questions/39447443/angular-2-difference-between-core-and-feature-modules –

+0

に記載されているように、コアモジュールを使用することもできます。メインモジュールで宣言しない限り、モジュールが遅延ロードされているかどうかは同じです。 – keepwalking

関連する問題