组件存储。与子组件共享商店

时间:2020-10-19 10:09:46

标签: ngrx component-store

我正在尝试将此新库添加到项目中,但是我对如何与其智能组件子项共享页面组件存储存有疑问。我知道我可以使用输入和输出,但是我认为这种方法就像传统的ngrx一样。

我认为我可以将组件存储与“提供根”一起使用。这种方法正确吗?

2 个答案:

答案 0 :(得分:2)

我今天遇到了同样的问题...

如果您在根目录中提供 WhatStoreService,则默认行为是在整个应用程序中共享该服务的一个实例。 (又是某种全局状态)

如果您希望在组件及其子组件的每个实例之间共享一个单独的依赖项实例,请在组件的 providers 属性上配置它。

@Component({
selector: 'parent-view',
templateUrl: './parent-view.component.html',
styleUrls: ['./parent-view.component.scss'],
providers: [WhateverStoreService]
})

现在您可以在父组件和子组件的构造函数中注入WhateverStoreService。

答案 1 :(得分:0)

有两种方法可以做到这一点。您可以创建一个在其provider数组中引用它的Facade服务,但是我认为这并不理想,因为它违背了使用简单的单个文件组件存储来管理组件状态的目的。

我发现我必须将providedIn: 'root'设置添加到我的装饰器中,以便在父组件和子组件之间共享状态。我知道这并不理想,但是如果您将其简单地添加到每个组件的提供程序中,我发现很难,您会发现您正在访问组件存储的不同实例,并且导航到新的子组件(甚至(如果父项仍在视图中),则不会保留该状态,因为它将是一个新的状态容器。这就是为什么我喜欢使用providedIn: 'root'