我正在尝试更新芯片的选定属性,但在更改绑定属性时收到ExpressionChangedAfterItHasBeenCheckedError错误
HTML
<mat-chip-list>
<mat-chip *ngFor="let w of weekDays" [selectable]="true" color="accent" selected="{{w.value}}" (click)="toggleValue(w)">
{{w.text}}</mat-chip>
</mat-chip-list>
组件
weekDays=[{text:"MON",value:true},{text:"TUE",value:false},{text:"WED",value:false},{text:"THU",value:false},{text:"FRI",value:false},{text:"SAT",value:false},{text:"SUN",value:false}]
toggleValue(w){
w.value = !w.value; //Error: ExpressionChangedAfterItHasBeenCheckedError
}
答案 0 :(得分:2)
根据文档,有multiple
选项默认为false。
当multiple
设置为false时,mat-chip-list
的行为类似于一组单选按钮(当选择新的芯片时,将所有其他芯片的选定值更新为false)。这就是导致ExpressionChangedAfterItHasBeenCheckedError。
https://material.angular.io/components/chips/api
允许设置多个选项:
<mat-chip-list [multiple]="true">
...
答案 1 :(得分:1)
您可以将 ChangeDetectorRef
注入您的组件并手动更新
constructor(private cdr: ChangeDetectorRef) {}
然后,
toggleValue(w){
w.value = !w.value;
this.cdRef.detectChanges();
}