У меня есть реактивная форма с использованием Angular Material input (mdInput
), который инициализируется следующим образом с помощью FormBuilder
:
contactForm: FormGroup;
this.contactForm = this.fb.group({
name: ['', [Validators.required, Validators.maxLength(128)]],
email: ['', [Validators.required, Validators.email]],
subject: ['', [Validators.required, Validators.maxLength(128)]],
message: ['', [Validators.required, Validators.maxLength(1000)]]
});
onSubmit(): void {
this.resetForm();
}
private resetForm(): void {
this.contactForm.reset();
}
С входами Angular Material, связанными с соответствующими элементами FormControl с подключением к (ngSubmit)
:
<form [formGroup]="contactForm" (ngSubmit)="onSubmit()">
<md-input-container>
<input mdInput formControlName="name" placeholder="Name">
</md-input-container>
<button type="submit" md-raised-button [disabled]="contactForm.invalid">Submit</button>
When calling reset()
on the FormGroup
contactForm
(this.contactForm.reset(), the form elements values are successfully cleared/replaced with empty strings, but the elements are both immediately dirty and touched with CSS classes
ng-invalid&&
ng-touchedpresent on the elements. Strangely they also have the
ng-pristineCSS class on them after the
reset()`.
Каков наиболее эффективный способ подойти к сбросу формы, включая очистку / сброс значений FormControl
и их пометку как неприкосновенные и не грязные? Использует markAsUntouched()
или markAsPristine()
? Используется ли setValue()
или reset()
с определенными параметрами? Цель состоит в том, чтобы сбросить форму, как если бы пользователь взаимодействовал с ней впервые.
Обновление. Вот Stackblitz, показывающий эту проблему в действии.
Спасибо за любую помощь, которую вы можете оказать.
reset
пометит форму как нетронутую и нетронутую. См. github.com/angular/angular/blob / master / packages / forms / src / - person Harry Ninh   schedule 02.09.2017Validators
, будут затронуты и загрязнены. Спасибо! - person Alexander Staroselsky   schedule 02.09.2017ngSubmit
нарушает поток. Я вижу все входы нетронутыми + нетронутыми, но ошибки все еще отображаются. Если вы измените кнопку отправки на что-то вроде<button type="button" (click)="onSubmit()"
, она будет работать - person Harry Ninh   schedule 02.09.2017