2017-02-03 7 views
1

私はアプリケーションに遅延読み込みモジュールを実装しましたが、app.module.tsは正しく設定されています。角2の遅延ロードモジュール - サービスではなくシングルトン

@NgModule({ 
    declarations: [ 
    AppComponent, 
    HeaderComponent, 
    HomeComponent 
    ], 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule, 
    routing 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

ルーティング構成

const APP_ROUTES: Routes = [ 
    { path: '', component: HomeComponent }, 
    { path: 'tools', loadChildren: 'app/tools/tools.module#ToolsModule' } 
]; 

export const routing = RouterModule.forRoot(APP_ROUTES); 

子モジュール内プロバイダフィールドを介してサービスを提供し、そのモジュールの構成要素間の切り替えは、(サービス・コンストラクタにログインすることによって試験)そのサービスを再度インスタンス化します。

サービスはモジュール内でのみ提供されます。

@NgModule({ 
    declarations: [ 
    ToolsComponent, 
    ToolsCartComponent, 
    ToolsContainerComponent, 
    ToolsFormComponent 
    ], 
    imports: [ 
    CommonModule, 
    toolsRouting 
    ], 
    providers: [ToolsService] 
}) 
export class ToolsModule { } 

なぜ、提供されるサービスがシングルトンではないのですか?

EDIT:

私はそのモジュール(この場合、バックエンドモジュール)にスコープサービスを追加することにより、遅延ロードモジュールのplunker例を修正しました。 、私はこれは既知の問題であると考えてい

Plunker link

+0

同じ問題を抱えていると、モジュールを読み込み中に.forRoot()メソッドが呼び出されなかったと思います。同様のソリューションを探していますが、私のサービスはシングルトンにする必要があります。 .cheers – Spock

+0

類似の問題があります。遅延ロードされたモジュールでルートを開くたびに、サービスプロバイダがモジュールレベルにあるにもかかわらず、新しいサービスが作成されます。 – mrh

+0

私はこのための回避策を知っていることを確信しています(アプリケーションモジュールでサービスを提供するため)。作業プランナー:https://plnkr.co/edit/UnxciqNLfL80BotWsYri?p=preview。注意すべき点の1つは、この警告です。[Angular2 Module documentation link](https://angular.io/docs/ts/latest/guide/ngmodule.html#!#why-_userservice_-isn-t-shared)それは関連しているが、私はそれを知りません。コアの理由。 – echonax

答えて

0

(コンソールに表示)サービスが再インスタンスを取得します(両方の遅延ロードされたモジュールの下で宣言されている)BackendComponentとBackendSecondComponentの切り替えここhttps://github.com/angular/angular/issues/12869を追跡しました。

関連する問題