【发布时间】:2017-03-17 15:27:23
【问题描述】:
在 Angular 文档的常见问题解答部分中指出,“与启动时加载的模块的提供者不同,延迟加载模块的提供者是模块范围的。”link
这里 'module-scoped' 是指模块还是扩展为包含属于该模块的所有组件?
我问的原因是因为我有一个延迟加载的模块,其中包含 2 个属于它的组件。我在模块中注册了一项服务,但由于某种原因,每个组件都获得了该服务的不同实例。
为了在我的延迟加载模块中提供 LazyModuleService 并将该服务的范围限定为延迟加载模块及其组件,我需要进行哪些更改?请包括所需的任何其他文件。我试图做一个通用的例子来帮助其他可能发现这个问题的人。
延迟加载模块:
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { Component1 } from './component1.component';
import { Component2 } from './component2.component';
import { LazyModuleService } from './lazy-module.service';
@NgModule({
imports: [
CommonModule,
],
declarations: [
Component1,
Component2,
],
})
export class LazyLoadedModule { }
【问题讨论】:
-
您是否在您的惰性模块的任何组件中将 LazyModuleService 配置为提供程序?
-
不,我没有。它只在 LazyLoaded 模块中配置。
-
我假设这是一个错字,但您的 LazyModule 中没有 LazyModuleService 作为提供者
-
不在这里,但在我的实际代码中,我这样做了,但它不起作用。
-
你能不能试着让你的模块暂时不延迟加载,看看你是否仍然遇到重复服务的问题?如果模块不是延迟加载的,则绝对应该与所有组件(包括模块外的组件)共享一个实例。如果这没有发生,那么你的配置有问题,与延迟加载无关
标签: angular angular2-routing angular2-modules