У меня есть элемент управления, который я хочу проверить:
<mat-form-field class="example-full-width">
<input matInput placeholder="Title " required [formControl]="titleFormControl">
<mat-error *ngIf="titleFormControl.hasError('required')">
Title is <strong>required</strong>
</mat-error>
<mat-error *ngIf="titleFormControl.hasError('duplicate')">
Name already used
</mat-error>
</mat-form-field>
и в компоненте у меня есть что-то вроде
titleFormControl = new FormControl('', {
validators: [
Validators.required,
Validators.minLength(4)
],
});
ngOnInit(): void {
this.titleFormControl.valueChanges
.pipe(distinctUntilChanged()).subscribe(this.isNameDuplicate.bind(this))
}
isNameDuplicate(): void {
const ret = this.data.findIndex((item, index) =>
index !== this.selSheetIndex && item.id >= 0 && this.titleFormControl.value === item.title) >= 0;
if (ret) {
this.titleFormControl.setErrors({ 'duplicate': true });
this.titleFormControl.markAsDirty(); // doesn't help neither :-/
}
}
Если я изменю текст, отображается mat-error
немедленно, если заголовок отсутствует.Когда я изменяю содержимое так, что isNameDuplicate()
приводит к ошибке, элемент управления имеет ошибку 'duplicate'
. Я ожидаю, что mat-error
отображается сразу, но почему-то это не так.Оценка mat-error
(для 'duplicate'
) срабатывает только в том случае, если я изменяю фокус, например, меняю другое поле.(в то время как 'required'
отображается немедленно)
Есть ли способ запустить оценку вручную, чтобы сразу же отображалась ошибка 'duplicate'
mat-error
?
Примечание: Я знаю, что яможет сделать это с помощью сопоставления ошибок, но, честно говоря, я понятия не имею, как применить проверку с данным списком.Поэтому я ищу решение для этого подхода.