В угловой форме, управляемой шаблоном, я хочу условно проверить поля ввода, основываясь на том, какая кнопка была нажата.Затем в файле компонента ts я проверяю, является ли форма действительной, т.е. действие может быть выполнено или недействительным, т.е. данные формы должны быть исправлены.Я использую ссылочную переменную шаблона формы, чтобы определить, является ли форма действительной или нет <form #heroForm="ngForm">
, затем в файле .ts @ViewChild('heroForm') form:Ngform;
Когда нажимается кнопка, я устанавливаю условие, является ли поле обязательным или нет, и затем оцениваю, является ли формадопустимо или нет.
Однако, когда я устанавливаю переменную actionType = 'A'
так, чтобы ввод был необходим, а затем сразу после вычисления this.form.valid
он говорит мне, что форма действительна, хотя это не так (требуется вводотсутствуют данные)
this.actionType = 'A';//this make the input field required
if(this.form.valid){ // should be false but it is true (although later it changes to false)
//code that should be executed when form is valid
}
После того, как я отладил приложение, я заметил, что установка переменной с новым значением, а затем проверка выполняется асинхронно, поэтому this.form.valid
проверяется до завершения предыдущей операции.
Когда я помещаю код проверки формы в setTimeout
, он работает, но я не уверен, что это правильный способ справиться с этим делом.
Есть ли другой способ, который должен или может быть решен?
Я создал образец стекаблица, чтобы проиллюстрировать проблему https://stackblitz.com/edit/angular-g1nb9s
Просмотрите вывод консоли, чтобы увидеть, что происходитing.
Ожидаемое поведение:
- Я нажимаю кнопку actionA
- Поле ввода становится обязательным при установке
actionType = 'A'
- значение
this.form.valid
в файле ts должно быть false
(потому что ввод требуется и пуст)
В настоящее время, когда я нажимаю кнопку actionA и сразу читаю this.form.valid
в файле компонента, затемзначение true