私はアプリケーションに遅延読み込みモジュールを実装しましたが、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例を修正しました。 、私はこれは既知の問題であると考えてい
同じ問題を抱えていると、モジュールを読み込み中に.forRoot()メソッドが呼び出されなかったと思います。同様のソリューションを探していますが、私のサービスはシングルトンにする必要があります。 .cheers – Spock
類似の問題があります。遅延ロードされたモジュールでルートを開くたびに、サービスプロバイダがモジュールレベルにあるにもかかわらず、新しいサービスが作成されます。 – mrh
私はこのための回避策を知っていることを確信しています(アプリケーションモジュールでサービスを提供するため)。作業プランナー: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