Ошибка mat не отображает ошибку для настраиваемых валидаторов, но шаблон отображает ошибку
app.component.html
<div class="col-sm-3">
<mat-form-field class="col-sm-3" appearance="outline"
class="example-full-width input-small-size d-block">
<mat-label>Personal Phone 1
</mat-label>
<input matInput formControlName="phonePersonal01" type="number">
<mat-error *ngIf="personalform.errors?.invalidPhoneMatch">
Enter different numbers.
</mat-error>
<!-- This error is not displaying -->
</mat-form-field>{{personalform.errors|json}}
<!-- Output is : { "invalidPhoneMatch": true }-->
</div>
app.component.ts
personalform = this.fb.group({
phno: ['', [Validators.required, Validators.pattern('\\+{0,1}[0-9]{10,12}')]],
phonePersonal01: ['', [Validators.required, Validators.pattern("\\+{0,1}[0-9]{10,12}")]],
phonePersonal02: ['', [Validators.required, Validators.pattern("\\+{0,1}[0-9]{10,12}")]],
}, { validator: this.checkContactNumbers }
);
...
checkContactNumbers(c: FormBuilder) {
//safety check
console.log(c[`value`][`phno`]);
console.log(c[`value`][`phonePersonal01`]);
if (c[`value`][`phno`] == c[`value`][`phonePersonal01`])
{
console.log('this ran');
return { invalidPhoneMatch: true }
}
}
Я пробую настраиваемый валидатор. канал json формы html показывает вывод, но ошибка mat не отображает вывод.
1 ответ
Решение
Поскольку это ваша собственная ошибка, вы не можете получить к ней доступ как к свойству элемента управления. Вместо этого сделайте это так:
<mat-error *ngIf="personalform.hasError('invalidPhoneMatch')">
Второй. То, как вы создаете объект ошибки, тоже неверно. У вас должна быть такая структура:
return {invalidPhoneMatch: {value: true}};
Второй подход
Сделайте валидатор валидатором контроллера поля формы.
personalform = this.fb.group({
phno: ['', [Validators.required, Validators.pattern('\\+{0,1}[0-9]{10,12}')]],
phonePersonal01: ['', [Validators.required, this.checkContactNumbers, Validators.pattern("\\+{0,1}[0-9]{10,12}")]],
phonePersonal02: ['', [Validators.required, Validators.pattern("\\+{0,1}[0-9]{10,12}")]],
});