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

标签 javascript angular typescript angular2-services

我已经在我的应用程序中实现了延迟加载模块,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);

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

该服务仅在模块中提供。

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

为什么提供的服务不是单例?

编辑:

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

Plunker link

最佳答案

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

关于javascript - Angular 2 延迟加载模块 - 服务不是单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42031521/

相关文章:

javascript - 如何在D3js中为不同的图表显示不同的标题?

angular - 如何使用angular2_components

angular - 双击/双击 Angular2 和 ionic

Angular 6 - '"/node_modules/firebase/index "' has no exported member ' 函数'

javascript - Typescript和jsx,为什么对象生命周期中静态声明的状态为null?

javascript - TypeScript:描述对象的对象

javascript - 与多个变量连接的字符串未在 setTimeout() 中执行

javascript - Firefox 中什么触发了 "Object cannot be created in this context, Code: 9"?

javascript - 如何根据提交时的每个标签获取多选 optgroup 值?

angular - 当我在 Ionic 2 中导入未使用的附加项时会发生什么?