无法分配给对象“[object Object]”的只读 属性 'selected'

Cannot assign to read only property 'selected' of object '[object Object]'

我试图以编程方式取消选中我的复选框,但是当我绑定到来自 ngrx 存储的值时 我收到以下错误 Cannot assign to read only property 'selected' of object '[object Object]' 这是我的观点

<ul>
    <li *ngFor="let language of languages">
      <div>
        <mat-checkbox [(ngModel)]="language.selected" color="primary">
          {{ language.value }}
        </mat-checkbox>
      </div>
    </li>
  </ul>

和我的老师

    this.languagesSub = this.store.select(getCreateLanguagesLanguages).subscribe(res => this.languages = res);

为什么我不能绑定到 language.selected?

如果您开启了严格模式,那么存储中的所有数据都是只读的。这意味着如果您想使用它们,您应该创建一个副本。

this.languagesSub = this.store.select(getCreateLanguagesLanguages)
  .subscribe(res => this.languages = res.map(l => ({...l})));
  // this will create a deep copy of all objects in languages array
 

您放入商店的每个对象都变得不可变。这意味着,所有的 setter 都被删除了。这就是 NgRx 保持不变性的方式,这是一个核心概念:你永远不会改变一个对象,你用一个“新版本”替换它。 所以,为了让它工作,你需要分派一个动作并使用你的减速器处理它。好好看看NgRx的《入门》