如何在Angular中为多个子组件提供数据?

时间:2018-03-06 15:01:53

标签: angular observable angular-services angular2-observables

我在Angular中有一个应用程序,需要一些关于构建事物的最佳方法的指导。在根级别是一个组件<App>,具有子Router-Outlet组件(当然可以解析为许多不同的组件)。

我有一个带有Subject的服务提供者,它提供了App组件的多个子组件所依赖的对象。在我看来,最好的方法是让App组件订阅Subject,并在Subject发出时更新一些东西。不幸的是,对我来说不太清楚的是,所有子组件也可以访问该值。

让每个单独的组件依赖于服务的替代方案似乎有点多余,因为每个文件都有代码:

ngOnInit(){
    this.myService.myData.subscribe(data => {
        this.data = data;
    });
}

这违反了DRY原则。

我甚至不确定我在这里没有X-Y问题。基本上,有一些数据需要多个视图异步检索。此数据可能会在应用的生命周期内发生变化。使用我在上面描述的提供者/主题/数据结构与Angular做一点DI似乎是合乎逻辑的,如果有点复杂的话,实现它的方式。

我最好怎么做?

1 个答案:

答案 0 :(得分:0)

通常,您需要使用服务来管理本地状态(在一批组件之间共享的东西)和NGRX用于应用程序范围的状态。

在您的情况下,如果它的应用程序范围和方案需要它,那么我建议您建立一个商店,您可以在其中向您的组件分发信息,而无需在任何地方注入服务。

您仍然需要在每个组件中订阅商店,但它更干净。此外,如果您发现违反DRY原则,您可以订阅服务中的商店并使用该商店在本地分发信息。但是,如果您需要更改订阅中的逻辑,则此方法不起作用。

我的建议,如果它是一个大应用程序,创建一个商店并订阅你的组件进行更改。