7.2响应式表单校验

angular预定义好的检验器

angular预定义好的检验器位于forms模块中的Validators中,常见校验器如下:

  • minLength:最小长度

  • maxLength:最大长度

  • required:必填

  • pattern:需要匹配的正则表达式

自定义校验器

自定义一个方法,该方法必须具有一个AbstractControl类型的参数,却必须要有一个返回值,返回值为任意结构的对象,但对象的key必须为string类型,值可为任意类型。

xxxxx(control:AbstractControl):{[key:string]:any}{

}

实战一:自定义FormControl检验器

模板代码

<div>电话:<input formControlName="telphone" type="number"></div>

控制器代码 自定义一个电话号码校验器mobileValidator

使用自定义电话号码校验器

实战二:自定义FormGroup检验器

模板代码

控制器代码 自定义密码检验器,要求密码和确认密码两个字段相同。

使用自定义密码校验器 {validator: this.passwordValidator}

实战三:提取检验规则到单独文件

新建validator文件夹,新建validators.ts文件。 在validators.ts文件中按以下格式编写校验规则:export fuction 自定义校验方法

使用校验器

  • 使用一个FormControl检验器

  • 使用多个FormControl检验器

  • 使用FormGroup检验器 {validator: this.passwordValidator}

获取校验结果

  • 获取表单元素合法性 this.formModel.get('userName').valid

  • 获取表单元素错误信息 this.formModel.get('userName').errors

  • 获取表单合法合法性: this.formModel.valid

显示错误信息

检验器提供错误信息 返回值{equal:{descxxx:“错误信息”}}

异步校验器 返回值为一个流

获取表单状态 pedding状态等待验证

状态字段

  • touched和untouched 用户是否访问过这个字段,是否获取过焦点 获取过焦点时: touched=ture untouched=false [hidden]=formModel.get('userName').valid || formModel.get('user').untouched

  • pristine和dirty 字段值是否改变过 未改变过 ptistine=ture;dirty=false [hidden]=formModel.get('userName').valid || formModel.get('user').dirty

  • pending 用于异步检验,正在校验时pending=ture [hidden]=formModel.get('userName').valid || formModel.get('user').pending

angular会自动根据字段的状态为字段添加一些样式 自定义样式 ng-pending ng-touched ng-invalid

检验响应式表单

检验模板式表单 将检验方法包装成一个指令 自定义指令 ng g directive directives/mobileValidatorDirector

一个token下可以挂多个值

required minlength="6" 使用novalidate禁止浏览器默认的表单校验

获取表单有效状态 myForm.valid

获取表单校验结果 myForm.form.hasError

获取字段状态

Last updated

Was this helpful?