ОБНОВЛЕНИЕ Jenson-button-event найдите лучший вариант, см. ТАК ответьте
Заглянув в ваш код, я вижу, что вы используете Angular Material для создания своего настраиваемого FormControl. Что ж, проблема при использовании материала Angular заключается в том, как сделать так, чтобы "ошибки" появлялись.
Когда мы используем <mat-error>
, ошибка появляется, если элемент управления недействителен. Учтите, что недействительна наша настраиваемая форма управления, а НЕ входной материал. Как избежать этого неудобства?
Решение использует CustomFieldErrorMatcher. если мы можем создать CustomFiledErrorMatcher, который учитывает ошибки нашего customFormControl, мы можем сделать что-то вроде
class CustomFieldErrorMatcher implements ErrorStateMatcher {
constructor(private customControl: FormControl) { }
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
return control.dirty && this.customControl.invalid;
}
}
Ну это только в ngAfterView напишите что-нибудь вроде
ngAfterViewInit(): void {
const ngControl: NgControl = this.injector.get(NgControl, null);
if (ngControl) {
setTimeout(() => {
this.control = ngControl.control as FormControl;
})
}
}
Имеет функцию
errorMatcher() {
return new CustomFieldErrorMatcher(this.control)
}
И создайте наш custom-formControl.html, например
<mat-form-field>
<mat-select [ngModel]="value" (ngModelChange)="value=$event;onChange($event)"
[placeholder]="placeholder" [disabled]="disabled"
[errorStateMatcher]="errorMatcher()">
<mat-option *ngFor="let option of optionList" [value]="option.value">
{{ option.label }}
</mat-option>
</mat-select>
<mat-error *ngIf="control?.hasError('required')">Required</mat-error>
<mat-error *ngIf="control?.hasError('error')">{{control?.errors.error}}</mat-error>
</mat-form-field>
В stackblitz вы можете увидеть две формы, одну которые используют customFormControl, а другой - в классическом режиме
person
Eliseo
schedule
04.07.2019
(selectionChange)="onChange($event.value)"
- person Eliseo   schedule 04.07.2019