Проблема показана в этот стек . После снятия флажка значение в коде устанавливается на 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;
}
}
См. этот стек для демонстрации.
<Ч />
Аналогичный результат можно получить, установив значение асинхронно в обратном вызове setTimeout
:
changeStatus() {
if (this.keepChecked) {
setTimeout(() => {
this.rowData.is_permitted = true;
});
}
}
но я предпочитаю поддерживать код синхронным, вызывая ChangeDetectorRef.detectChanges
.