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?