У меня есть два входа, которые используют FormControl, которые всегда отображаются как действительные, но если я уберу один, остальные будут действительными/недействительными, как и ожидалось. Я бы заменил два элемента управления формой на один ControlGroup, но 1.) Я хочу понять, что я делаю неправильно, и 2.) Мне нужно получить доступ к одному элементу управления формой для автозаполнения, которое у меня есть в компоненте.
Соответствующий HTML:
<form
fxLayout="column"
fxLayoutAlign="center center"
(ngSubmit)="onSubmit(status, count)"
#statusForm="ngForm"
>
<!-- Status Input -->
<div>
<mat-form-field>
<input
matInput placeholder="Status"
[formControl]="statusFormControl"
[errorStateMatcher]="matcher"
[matAutocomplete]="auto"
[(ngModel)]="status"
name="status"
required
>
<mat-error *ngIf="statusFormControl.hasError('required')">
Status is <strong>required</strong>
</mat-error>
</mat-form-field>
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let status of filteredStatusList | async" [value]="status.name">
{{ status.name }}
</mat-option>
</mat-autocomplete>
</div>
<!-- Count Input -->
<mat-form-field>
<input
matInput placeholder="Count"
[formControl]="countFormControl"
type="number"
min="1"
[(ngModel)]="count"
name="count"
required
>
<mat-error *ngIf="countFormControl.hasError('required')">
Count must be a <strong>number</strong>
</mat-error>
</mat-form-field>
{{statusForm.valid}}
{{statusForm.invalid}}
<button
mat-raised-button color="primary"
*ngIf="statusForm.valid"
type="submit"
[disabled]="statusForm.invalid"
>
Add
</button>
и ТС:
export class ... {
statusFormControl = new FormControl('', [
Validators.required
]);
countFormControl = new FormControl('', [
Validators.required
]);
...
constructor() {
this.filteredStatusList = this.statusFormControl.valueChanges
.pipe(
startWith(''),
map(status => status ? this.filterStatusList(status) : this.allStatuses.slice())
);
}
filterStatusList(statusName: string) {
return this.allStatuses.filter(status =>
status.name.toLowerCase().indexOf(statusName.toLowerCase()) === 0);
}
}
new FormControl
в коде в дополнение кngModel
в шаблоне. Рассмотрите возможность удаленияngModel
и просто используйте реактивные формы. - person DeborahK   schedule 01.02.2018