<input type="checkbox" [(ngModel)]="rowData.is_permitted" (change)="changeStatus()">
changeStatus() {
rowData.is_permitted = true;
}
如果我取消选中复选框,但有条件地希望选中该复选框,则该标志会更新,但不会影响UI。
答案 0 :(得分:1)
问题显示在this stackblitz中。取消选中该复选框后,代码中的值设置为true
,但该复选框保持未选中状态。
您可以执行以下操作以通过更改代码来覆盖用户的操作:
ChangeDetectorRef.detectChanges
true
在下面的代码中,我处理ngModelChange
事件。问题中提到的条件行为是通过keepChecked
属性进行仿真的:
<input type="checkbox"
[(ngModel)]="rowData.is_permitted"
(ngModelChange)="changeStatus()">
changeStatus() {
if (this.keepChecked) {
this.changeDetectorRef.detectChanges();
this.rowData.is_permitted = true;
}
}
有关演示,请参见this stackblitz。
可以通过在setTimeout
回调中异步设置值来获得类似的结果:
changeStatus() {
if (this.keepChecked) {
setTimeout(() => {
this.rowData.is_permitted = true;
});
}
}
但是我更喜欢通过调用ChangeDetectorRef.detectChanges
使代码保持同步。
答案 1 :(得分:0)
如果我理解您的问题, 更改输入后,它保持不变。
因此,当rowData.is_permitted
为true时,您需要将其设置为false。
rowData.is_permitted
是错误的,您需要使其正确。
如果这是您的问题,请尝试通过更改changeStatus
函数来实现:
rowData.is_permitted = !rowData.is_permitted;
rowData.is_permitted将获得相反的值。
我从@SunilSingh派生的工作示例是here
答案 2 :(得分:0)
您必须在单击时更改ngModel值。可能是rowData.is_permitted
的默认值是true
,因此单击时它不会被您的功能更改。
您的changeStatus函数将为
changeStatus() {
rowData.is_permitted = !rowData.is_permitted;
}