Angular 2 服务依赖注入问题

Angular 2 Services Dependency Injection Issue

在我的应用程序中,我有一个包含两个组件的模块,ListComponent 和 DetailsComponent 以及一个服务 MyModuleService。

当用户访问 ListComponet 时,我从服务器获取列表并将其添加到服务的列表 属性(然后我将其用作缓存)。

当用户单击列表中的任何项目时,都会转到该项目的“详细信息”页面。

在详细信息组件中,我有下一个和上一个链接的导航,我使用服务的列表 属性 来决定下一个和上一个项目。

如果用户返回列表页面,列表将从缓存中呈现,即从服务的列表 属性 中呈现。

我的列表组件还有一个搜索表单,允许用户指定搜索条件并从符合该条件的服务器中检索项目。

问题是,如果我导航到任何其他没有引用上述 MyModule 的路由,然后返回到列表页面,它不会刷新 MyModuleService,这意味着它没有销毁服务实例。

可能是因为 MyModuleService 被添加到全局依赖注入上下文。

任何人都可以指导,如何将服务范围限制为仅模块?这样当我导航到另一条路线时,它会破坏 MyModuleService 实例。

要为不同的模块提供不同的服务实例,请使用 providers 数组。

Module1:

providers: [MyService]

Module2:

providers: [MyService]

现在这两个模块正在使用同一服务的不同 个实例。

如果需要,您可以在组件级别声明提供程序。这意味着该组件和任何子组件将拥有该服务的单个实例的实例。

如果您希望整个应用只使用一次服务实例,请在顶级模块的提供者数组中提供它。

Probably because the MyModuleService is added to global dependency injection context.

是的,this is by design

将范围限制在模块中的方法是在模块中使用 "top component"(如给定文档 link 中所述),然后在 [=11= 中声明服务] @Component 装饰器的数组:

@Component({
    selector: 'my-top-component',
    providers: [ MyModuleService ]
})
export class MyTopComponent { }

这样,MyModuleService 范围将限制在 MyTopComponent 及其子级。但是由于 MyTopComponent 中有两个嵌套组件(ListComponentDetailsComponent),因此您也必须处理 child routes