繁体   English   中英

Angular 2延迟加载模块 - 服务不是单例

[英]Angular 2 lazy loaded module - service not singleton

我已经在我的应用程序中实现了延迟加载模块,app.module.ts已正确配置。

@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);

通过子模块中的providers字段提供服务,并在该模块的组件之间切换,重新实例化该服务(通过登录服务构造函数进行测试)。

该服务仅在模块中提供。

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

为什么提供的服务不是单身人士?

编辑:

我通过添加仅限于该模块的服务(在本例中为后端模块)修改了延迟加载模块的plunker示例。 在BackendComponent和BackendSecondComponent之间切换(它们都在延迟加载的模块下声明)服务被重新实例化(在控制台中可见)

Plunker链接

我相信这是一个已知的问题,在这里跟踪https://github.com/angular/angular/issues/12869

我认为这与Stackoverflow帖子的问题相同: 我如何在延迟加载的模块中提供服务,并将该服务限定为延迟加载的模块及其组件?

解决方案是在延迟加载的模块中创建“根组件”,并将组件添加到此新的根组件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM