Angular 2 - 如何以特定顺序在组件中实例化多个服务?

Posted

技术标签:

【中文标题】Angular 2 - 如何以特定顺序在组件中实例化多个服务?【英文标题】:Angular 2 - How to instantiate multiple services in a component with specific order? 【发布时间】:2016-12-29 03:15:07 【问题描述】:

我正在寻找一种方法以特定顺序在一个组件中实例化多个服务。

例如,假设我有 3 个服务,即时间、设备和数据服务,其中数据服务订阅时间和设备服务的 'time_range' 和 'device_list' 可观察对象以更新其数据。这 3 个服务在登录后在 MainComponent 中实例化,该组件只需要数据服务的“数据”作为其视图。

这意味着数据服务应该在时间和设备服务之前被实例化,以便在它们被实例化(在构造函数中初始化)时能够检测到时间和设备服务的变化。

我已将这些服务包含在 MainComponent 的“@Component”装饰器的“providers: []”中,但我不知道如何在其他服务之前实例化数据服务。我尝试更改提供者数组的顺序,但结果没有区别。

将数据服务实例化到 AppComponent 或在引导程序上会起作用,但我不希望它存在于更大的范围内。

我是 Angular 2 的新手,不确定我是否正确理解了服务和组件的概念,因此我非常感谢收到这种服务方式的反馈,这些服务执行所有逻辑以提供数据和组件只是获取数据从正确的服务和显示到它的视图。

提前谢谢你!

【问题讨论】:

【参考方案1】:

使用 Angular2 DI,您无法指定顺序。只要依赖项需要特定的顺序,DI 就会自行计算顺序。

除此之外,您的代码不应依赖于特定的实例化顺序。

例如,您可以使用BehaviorSubjectReplaySubject 让订阅者获取最后发出的值,以防他们在发送者已经发出第一个事件之后订阅或对新订阅做出反应。

【讨论】:

BehaviorSubject 是我一直在寻找的东西!对于那些正在寻找更多信息的人,请参阅此文档:github.com/ReactiveX/rxjs/blob/…

以上是关于Angular 2 - 如何以特定顺序在组件中实例化多个服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Angular中的另一个服务调用服务的特定实例?

如何使同一个 Angular 2 组件的多个实例在同一个容器中正常工作

如何使用 django 模板以特定顺序呈现 django 模型实例?

如何在 Angular 中显示具有自己路由的父组件内的特定子组件?

如何从另一个组件重新渲染特定组件模板?角 2

Angular 在父子组件中使用多个服务实例