Мне нужно сравнить, совпадает ли сначала введенный текст со встроенными ошибками, такими как требуемый, minlength, maxlength, pattern, а затем проверить, удовлетворяет ли ввод и мое пользовательское состояние.
Чтобы применить пользовательское условие, я использовал пользовательскую директиву валидатора. Когда я использую эту директиву, она отображает более одного сообщения об ошибке одновременно. Я устал от всех комбинаций, но все еще не могу получить только одно сообщение об ошибке за раз.
Так что мне нужно написать общую директиву, которая может отображать:
1) Все встроенные ошибки также, а затем отображать наши собственные ошибки.
2) Отображать только одну ошибку за раз
3) Первый приоритет должен быть предоставлен для встроенных ошибок, таких как требуемые, шаблон и т. Д., А затем наше пользовательское условие должно быть проверено.
HTML-код
<form name="checkForm" #checkForm="ngForm">
<label>Check Code :<br>
<input type="text" name="checkFiled" required pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,}"
[(ngModel)]="checkNgFiled" #checkFiled="ngModel" autocomplete="off"
[MatchInput]="checkVar">
</label><br>
<div *ngIf="(checkFiled.touched || checkFiled.dirty) && checkFiled.invalid"
class="ErrCls">
<span *ngIf="checkFiled.errors.required">Input is Empty.</span>
<span *ngIf="checkFiled.errors.pattern">Code is weak</span>
<span *ngIf="checkFiled.errors.unMatchError">Input do not match</span><br>
</div>
<button [disabled]="!checkForm.valid">Check</button>
</form>
Код TS
import { Directive, Input } from '@angular/core';
import { AbstractControl, Validator, NG_VALIDATORS, ValidationErrors } from '@angular/forms';
@Directive({
selector: '[MatchInput]',
providers: [
{ provide: NG_VALIDATORS, useExisting: MatchInputCls, multi: true }
]
})
export class MatchInputCls implements Validator
{
@Input() MatchInput: string;
validate(inputControl: AbstractControl): ValidationErrors | null
{
// Need a proper condition to first check for inbuilt errors, It its present my code should return null,
if(!inputControl.errors || (inputControl.errors &&
Object.keys(inputControl.errors).length == 1 &&
inputControl.errors.unMatchError ))
{
if(inputControl.value != this.MatchInput)
{
return { unMatchError: true };
}
}
console.log("OutSide", inputControl.errors)
return null;
}
}