У меня есть форма по шаблону компонента:
<form (ngSubmit)="submitLogin(loginForm)" #loginForm="ngForm">
<mat-input-container>
<input matInput [placeholder]="'User Name'" ngModel name="username" autofocus required>
</mat-input-container>
<br>
<mat-input-container>
<input matInput [placeholder]="'Password'" ngModel type="password" name="password" required>
</mat-input-container>
<br>
<button [disabled]="loginForm.invalid" mat-raised-button type="submit">
Login
</button>
</form>
А вот обработчик отправки моего компонента:
public submitLogin(loginForm: NgForm) {
return this.authService.login(loginForm.value)
.subscribe(
res => this.router.navigate(['/customers']),
error => loginForm.controls.password.reset() // this place!
);
}
Он работает, и при ошибке входа в систему (передача случайных значений) я вижу
Вопрос. Как я могу сбросить точные значения полей формы и сделать их по-настоящему первозданными и нетронутыми? Таким образом, он должен быть действительным, не отмечая его красной «недопустимой» рамкой в пользовательском интерфейсе.
Сразу после loginForm.controls.password.reset()
я вижу, что loginForm.controls.password.touched
- это ложь, а loginForm.controls.password.pristine
- истина, но я также вижу, что loginForm.controls.password.status
является "НЕВЕРНО". Если я взломаю его и напрямую присвою значение "VALID" свойству status
, красная недопустимая граница исчезнет, но это нарушит аннулирование потерянного фокуса, если я сосредоточусь на этом поле, а затем уйду без каких-либо Вход. Должен быть законный способ сбросить заполненную форму и одновременно сделать ее действительной.