Angular 2服务依赖注入问题

Angular 2服务依赖注入问题,angular,angular2-services,Angular,Angular2 Services,在我的应用程序中,我有一个包含两个组件的模块,ListComponent和DetailsComponent以及一个服务MyModuleService 当用户访问ListComponet时,我从服务器获取列表并将其添加到服务的list属性(然后将其用作缓存) 当用户单击列表中的任何项目时,它将转到该项目的详细信息页面 在“详细信息”组件中,我有下一个和上一个链接的导航,我使用服务的列表属性来决定下一个和上一个项目 如果用户返回列表页面,则列表将从缓存中呈现,即从服务的列表属性呈现 “我的列表”组件

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

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

当用户单击列表中的任何项目时,它将转到该项目的详细信息页面

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

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

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

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

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


任何人都可以提供指导,我如何将服务范围限制为一个模块?因此,当我导航到另一个路由时,它会销毁MyModuleService实例。

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

Module1:

providers: [MyService]

Module2:

providers: [MyService]
现在,这两个模块使用同一服务的不同实例

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

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

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

是的,还有

将范围限制到模块的方法是在模块中使用“顶级组件”(如给定文档链接中所述),然后在
@component
装饰器的
providers
数组中声明服务:

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

这样,
MyModuleService
范围将被限制为
MyTopComponent
及其子项。但是,由于在
MyTopComponent
中有两个嵌套组件(
ListComponent
DetailsComponent
),您也必须处理它们。

我认为,从设计上讲,您不能将DI范围限制在单个模块中。您可以读取到达ListComponent的路径的url,并根据该url决定是否刷新。谢谢Rodrigo,这很有帮助:)但它并不能真正从内存中删除服务。。。其他想法?