false
,true
或indeterminate
。 我知道我不能将复选框设置为值indeterminate
,但是我们可以在输入上访问[indeterminate]
。 是否有可能通过ngModel
以某种方式设置所有三个状态?我有以下代码,它有点起作用,但是我得到了一个
ExpressionChangedAfterItHasBeenCheckedError
错误。HTML
<div *ngFor="let label of ClientLabels | async">
<label for="{{label.objectId}}">{{label.labelName}}</label>
<input id="{{label.objectId}}" type="checkbox" name="group" [indeterminate]="checkedLabels()"
[checked]="checkedLabels(label)" (change)="toggleSelectedLabels(label)" />
</div>
TS
checkedLabels(label): boolean {
const index = this.selectedLabels.indexOf(label.objectId);
this. indeterminateState = false;
if (!this.selectedClients.length) {
return false;
}
if (this.countInArray(this.selectedLabels, label.objectId) === this.selectedClients.length) {
return true;
}
if (index >= 0) {
this. indeterminateState = true;
}
}
countInArray(array, value) {
return array.reduce((n, x) => n + (x === value), 0);
}
这里的用例与Gmail标签相似,不同之处在于客户端被用作邮件。如果所有邮件都有相同的标签,则它们将显示为已选中,但是如果它们没有共享标签,则它将显示为不确定状态,可以通过三种状态(true、false、不确定)循环。
Q1. 如何像Gmail一样循环遍历这三种状态?
Q2. 为什么我会在当前设置下收到ExpressionChangedAfterItHasBeenCheckedError错误?
这是当前进度的Stackblitz https://stackblitz.com/edit/angular-3bbutx