Angular 从组件ngrx更改存储状态

Angular 从组件ngrx更改存储状态,angular,ngrx,ngrx-store,ngrx-store-4.0,Angular,Ngrx,Ngrx Store,Ngrx Store 4.0,我正在使用选择器从商店中进行选择 this.quizz = this.store.select(getSelectedQuizz); 我使用异步管道来读取模板中这样的可观察数据 [*ngIf="quizz | async; let quizz"] 我只定义了操作,没有修改缩减器,但当我保存表单时,模板是一个表单。我发送了一个更新操作,该操作仅在我的操作中使用readonly定义。但我注意到,当我保存表单并发送操作时,存储区发生了更改,我没有在缩减器中指定任何逻辑来更新表单的状态更新行动,但我

我正在使用选择器从商店中进行选择

this.quizz = this.store.select(getSelectedQuizz);
我使用异步管道来读取模板中这样的可观察数据

[*ngIf="quizz | async; let quizz"]
我只定义了操作,没有修改缩减器,但当我保存表单时,模板是一个表单。我发送了一个更新操作,该操作仅在我的操作中使用readonly定义。但我注意到,当我保存表单并发送操作时,存储区发生了更改,我没有在缩减器中指定任何逻辑来更新表单的状态更新行动,但我不明白为什么


您正在使用双向数据绑定将存储状态绑定到表单,这是一种不好的做法。
除非使用减缩器,否则不要触摸存储状态内的任何内容

使用spread运算符复制状态:

this.store.select(getSelectedQuizz).subscribe(quizz => 
    this.quizzModel = {...quizz };
);
还要注意深度复制。使用类似于
this.quizzModel=JSON.parse(JSON.stringify(quizz))用于深度复制

提示: 为了避免此类错误,您可以强制状态保持不变。
检查

没有其他方法可以创建一个全新的可观察对象,而不是引用相同的对象observable@HachimiAhmedAmine你不需要一个全新的观察者。只需保存observable结果的副本,如下所示:this.store.select(getSelectedQuizz).subscribe(quizz=>this.quizz={…quizz}