正确的商店/多实例化组件设计

时间:2018-09-06 20:02:26

标签: angular ngrx ngrx-store ngrx-effects

我有一个称为Runner的Angular组件,并且在同一屏幕上有三个实例。

它具有两个链接的选择,第一个被称为“模型”,第二个被称为“定义”,每个模型可能具有多个定义。

OnInit我触发了一个加载所有模型的效果(触发了3次,每个组件实例触发一次,我不确定是否可以)并将其存储在存储区中(在同一“段”中) “,一组模型)。

ngOnInit() {
  this.store.dispatch(new SimulationActions.LoadModels());
  this.models = this.store.pipe(select(fromSimulator.getModels));
}

问题是,如果我在第一个实例的第一个选择中选择模型A,那么我将在树实例的选择中获得A定义,因为它触发相同的效果并在成功中使用相同的选择器< / p>

modelChange() {
  this.store.dispatch(new 
       SimulationActions.LoadDefinitions(this.selectedModel));
  this.definitions = 
       this.store.pipe(select(fromSimulator.getDefinitions));
}

如果在第二个实例中选择模型B,则将在树实例中为模型B定义,在第一个实例中,将选择模型A,但有B个子对象。

组件完全相同,除了这个事物影响/存储问题之外,它们用于比较,因此不能为每个实例编写不同的组件。

任何人都可以给我一点启发。

谢谢。

1 个答案:

答案 0 :(得分:1)

您必须以某种方式区分选择器和效果。
为了达到效果,您必须创建不同的动作或使用有效负载。
对于选择器,它们是相同的,您将不得不使用不同的选择器或selector with props