我知道它已经asked,但尚未直接得到答复。 我希望获得2个以上具有相同的reducer / effects / selector / actions的商店。
基本上,我在页面上并排显示一些数据,两者的行为完全相同。
我知道,我可以做2个功能,side1
,side2
,但是随后我将必须复制所有选择器,所有动作,所有效果,所有化简器;否则它们会相互碰撞。
在避免代码重复的同时实现此目的的最佳方法是什么?假设我必须修改所有代码以接受我所有操作的side
参数,这将是一个耻辱。
答案 0 :(得分:0)
长话短说-不,没有一种简单的方法。
要执行此操作,您需要确保模块不具有导入StoreModule.forRoot
的父类(如AppModule)。然后,您可以在每个模块中导入StoreModule.forRoot
,它将为每个节点创建单独的存储,但是在这种情况下,您无法访问其他存储的数据。
如果您想拥有一个商店,但要以相同的动作影响不同的功能,则需要对所有动作,化简器和效果实施correlationId
模式,以确保它们不会造成数据冲突
您也可以像ngrx/data
一样做-通过服务而不是actions
和selectors
来访问存储,然后对于每个模块都是如此
@Injectable()
export class UserSelectorService implements OnInit {
constructor(
protected serviceFactory: EntityCollectionServiceFactory,
) {
}
public readonly users = this.serviceFactory.create('users');
public readonly data$ = this.users.selectAll();
ngOnInit() {
this.users.load();
}
}