Angular 2服务依赖注入问题
在我的应用程序中,我有一个包含两个组件的模块,ListComponent和DetailsComponent以及一个服务MyModuleService。Angular 2服务依赖注入问题
当用户访问ListComponet时,我从服务器获取列表并将其添加到服务的List属性(然后我将其用作缓存)。
当用户单击列表中的任何项目时,它将转到该项目的“详细信息”页面。
详细信息组件我使用Next和Previous链接导航,我使用服务的List属性来决定下一个和上一个项目。
如果用户返回到列表页面,则列表将从缓存中呈现,即从服务的List属性中呈现。
我的列表组件还有一个搜索表单,它允许用户指定搜索条件并从匹配该条件的服务器检索项目。
问题是,如果我导航到没有任何引用上面提到的MyModule,然后回到列表页面的任何其他路由,然后回到列表页面,它不刷新MyModuleService,这意味着它没有销毁Service实例。
可能是因为MyModuleService被添加到全局依赖注入上下文中。
任何人都可以请引导,我如何限制服务的范围只有一个模块?所以当我导航到另一条路线时,它会销毁MyModuleService实例。
回答:
很可能是因为MyModuleService被添加到全局依赖注入上下文中。
是和this is by design。
限制的范围,以所述模块的方式是通过在模块中使用“顶部部件”(如在给定的文档链接所述),则providers
阵列@Component
装饰的中宣布服务:
@Component({ selector: 'my-top-component',
providers: [ MyModuleService ]
})
export class MyTopComponent { }
这样,MyModuleService
范围将被限制为MyTopComponent
及其子女。但由于MyTopComponent
内部有两个嵌套组件(ListComponent
和DetailsComponent
),所以您也必须处理child routes。
回答:
要向不同模块提供不同的服务实例,请使用providers数组。
Module1: providers: [MyService]
Module2:
providers: [MyService]
现在这两个模块都使用相同的服务的不同实例。
如果需要,您可以在组件级别声明提供程序。这意味着该组件和任何子组件将具有该服务的单个实例的实例。
如果您希望整个应用只使用一次服务实例,然后将其提供给顶层模块的提供者数组。
以上是 Angular 2服务依赖注入问题 的全部内容, 来源链接: utcz.com/qa/263721.html