Вам не нужен специальный валидатор для отображения ошибок в ваших формах. То, что вы делаете с this.userNameValidation.bind(this)
, создает пользовательский валидатор.
Что вы можете сделать, это создать переменную в вашем компоненте (файл .ts) для ссылки на элемент управления формы в вашей группе форм.
В этом случае get userName() { return this.form.get('userName'); }
.
Это создает переменную userName
для вашего шаблона "get". Впоследствии вы можете использовать эту переменную для проверки на наличие ошибок, таких как:
template .html file:
<form [formGroup]="form">
<label for="userName">User Name: </label>
<input type="text" formControlName="userName" name="userName">
<br>
<ng-container *ngIf="userName.errors?.required && (userName?.touched || userName?.dirty)">
<small class="formError">User Name is required!</small>
</ng-container>
<ng-container *ngIf="userName.errors?.minlength && (userName?.touched || userName?.dirty)">
<small class="formError">User Name must be at least 3 characters!</small>
</ng-container>
<br>
</form>
Как видите, userName.errors?.minlength
и userName.errors?.required
будут напрямую ссылатьсяuserName
в вашем файле компонентов. Вы также хотите проверить .touched
и .dirty
, потому что вы не хотите отображать ошибку только до тех пор, пока ваши пользователи не взаимодействуют с элементом управления формой.
Для дальнейшего использования прочитайте Официальные документы на английском языке по проверке реактивной формы (Примечание: читать только первую часть , следующий раздел в формах на основе шаблонов)
Вы также должны использовать <ng-container>
, потому что* ngIf отобразит элементы в вашей DOM, даже если * ngIf оценивается как false. См. Это Угловой: Элемент ng-контейнера
компонент .ts файл
import { Component } from '@angular/core';
import { FormBuilder, Validators, FormControl, FormGroup } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
// requiredError: boolean; //not required
// minLengthError: boolean; //not required
form: FormGroup;
constructor(private fBuilder: FormBuilder) { }
get userName() { return this.form.get('userName'); } //create a userName variable for template to reference
ngOnInit(){
this.form = this.fBuilder.group({
userName: [
'', [ Validators.required, Validators.minLength(3)]
]
});
}
ngAfterViewChecked(){
console.log(this.userName.errors)
}
Пример разветвленного стекаблика ⚡⚡
Надеюсь, это помогло!