Я наблюдаю за изменениями в реактивной форме, подписываясь на изменения стоимости.Когда определенные значения не заданы в форме, я устанавливаю переключатель углового скольжения материала в значение false (чтобы установить флаг «Активный» в значение false для текущей редактируемой записи данных).
То, что я нахожу, этоЯ должен отложить вызов setValue для элемента управления или при следующем нажатии он не переключается.Есть событие изменения значения, но значение все еще установлено в false.Примерно то, что я делаю, это:
this.editForm.valueChanges.subscribe(form => {
var valid = true;
if (!form.isRequired)
valid = false;
if (!valid) {
setTimeout(()=>{
this.editForm.controls['isActive'].setValue(false);
},1);
}
});
Посмотрите пример без setTimeout на https://stackblitz.com/edit/angular-fp5tya, и пример с правильным поведением и setTimeout на https://stackblitz.com/edit/angular-fp5tya-m9yy7n. Нажмите «Активно», затем«Требуется активировать», тогда «активный» должен привести к тому, что оба флажка будут активными.Однако «Активный» нужно нажать снова.Аналогично, нажатие «Активно» без установки «Обязательный» будет выдавать предупреждение только при каждом втором щелчке, когда состояние формы должно вернуться в исходное состояние.
Я считаю, что необходимо использовать setTimeout в качестве обходного пути.Есть ли способ установить значения в форме в форме наблюдателя, не откладывая ее?