[英]Angular 2 - Custom Form Validator not working - Cannot read property 'value' of null
[英]Cannot read property of custom Validator and required - Angular
我嘗試制作自定義驗證器,當他/她在文本上留出空格時會給用戶消息,但我收到此錯誤。
這是組件的html
<form [formGroup]='form'> <div class="form-group"> <label for="username">Username</label> <input formControlName='username' id="username" type="text" class="form-control"> <div *ngIf="username.touched && username.touched" class="alert alert-danger"> <div *ngIf="username.errors.required"> You need to enter user name</div> <div *ngIf="username.errors.minlength"> Min Length is {{ username.errors.minLength.requiredLength}} </div> <div *ngIf="UserNameValiditors.removeSpaceFromUserName"> removeSpaceFromUserName </div> </div> </div> <div class="form-group"> <label for="password">Password</label> <input formControlName='password' id="password" type="text" class="form-control"> </div> <button class="btn btn-primary" type="submit">Sign Up</button> </form>
這是自定義驗證器類
import { AbstractControl, ValidationErrors } from "@angular/forms"; export class UserNameValiditors { static removeSpaceFromUserName(control: AbstractControl): ValidationErrors | null { if ((control.value as string).indexOf(' ') >= 0) { return { removeSpaceFromUserName: true }; } else { return null; } } }
import { Component } from '@angular/core'; import { FormControl , FormGroup , Validators } from "@angular/forms"; import { UserNameValiditors } from './UserNameValditors'; @Component({ selector: 'signup-form', templateUrl: './signup-form.component.html', styleUrls: ['./signup-form.component.css'] }) export class SignupFormComponent { form= new FormGroup( { username : new FormControl('', [ Validators.required, Validators.minLength(3) , UserNameValiditors.removeSpaceFromUserName ]) , password : new FormControl('',Validators.required) }); get username() { return this.form.get('username'); } }
使用hasError()
檢查表單上是否存在某些錯誤。
HTML代碼
<div *ngIf="username.hasError('required')"> You need to enter user name</div>
<div *ngIf="username.hasError('minlength')"> Min Length is {{ username.hasError('minLength')}}
</div>f
<div *ngIf="username.hasError('removeSpaceFromUserName')">
removeSpaceFromUserName </div>
</div>
您的工作代碼在這里
您可以嘗試使用此解決方案。
我已經在Stackblitz上創建了一個演示
app.component.ts
myForms: FormGroup;
constructor(fb: FormBuilder) {
this.myForms = fb.group({
username: [null, Validators.compose([
Validators.required, Validators.minLength(3), usernameValidator])],
password: [null, [
Validators.required]]
});
}
app.component.html
<form [formGroup]="myForms">
<label>User Name :
<input type="text" formControlName="username">
</label><br>
<div class="errors" *ngIf="myForms.get('username').invalid && (myForms.get('username').touched || myForms.get('username').dirty)">
<div *ngIf="myForms.get('username').hasError('required')">
username is required
</div>
<div *ngIf="myForms.get('username').errors.minlength">
username must be at least 3 characters
</div>
<div class="error-text" *ngIf="myForms.get('username').hasError('removeSpaceFromUserName')">
removeSpaceFromUserName
</div>
</div>
<div class="form-group">
<label for="password">Password</label>
<input
formControlName='password'
id="password"
type="text"
class="form-control">
</div>
<button class="btn btn-primary" type="submit">Sign Up</button>
</form>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.