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内部有两个嵌套组件(ListComponentDetailsComponent),所以您也必须处理child routes。

回答:

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

Module1: 

providers: [MyService]

Module2:

providers: [MyService]

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

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

如果您希望整个应用只使用一次服务实例,然后将其提供给顶层模块的提供者数组。

以上是 Angular 2服务依赖注入问题 的全部内容, 来源链接: utcz.com/qa/263721.html

回到顶部