angular6 - 是否可以创建一个自定义表单控件验证函数,该函数具有响应式表单的依赖项
问题描述
我有一个反应式表单,它有一个“密码”和“验证密码”字段。我想为“验证密码”字段创建一个自定义验证函数。它应该检查“验证密码”的值是否与“密码”相同。是否可以创建这样的验证功能并在创建表单控件时使用它?
'formcontrol: [null, myValidationFunction]'</p>
据我所知,验证函数采用“FormControl”并返回一个对象。没有办法向它传递另一个参数。
我读过我可以创建一个“指令”,但示例将它用于“模板”驱动的表单。
解决方案
实现此目的的一种方法是将密码和 verifyPassword 放入其自身的FormGroup中。然后可以将此 formGroup 传递给自定义验证函数,该函数将 AbstractControl 类型作为 FormGroup 扩展的参数。所以你可以这样做:
模板.html
<form [formGroup]="main">
<!-- Other FormControls -->
<div formGroupName="passwordGroup">
<!-- input element for password FormControl -->
<!-- input element for verifyPassword FormControl -->
</div>
</form>
组件.ts
function passwordValidator(c: AbstractControl) : {[key: string] : boolean} | null {
let password = c.get('password');
let verifyPassword = c.get('verifyPassword');
if(password.value === verifyPassword.value)
return null;
else
return {'match' : true};
}
ngOnInit() {
this.main = this.fb.group({
otherFormControls : [''],
passwordGroup: this.fb.group({
password: ['',[Validators.required],
verifyPassword: ['',Validators.required]
},{validator : passwordValidator})
});}
推荐阅读
- angular - Angular - 找不到模块:错误:无法解析“角度”
- kubernetes - Kubectl api-resources 列出具有不同 API 组的重复资源
- python - 如何从有条件的熊猫系列中删除字符?
- json - 在树状结构中以角度显示 Jason 数据
- sql - 使用“with”子句
- vuejs2 - 如何在使用 Vuetify v.1.5 的项目中仅覆盖 Vuetifyjs v.2 中的一种样式
- excel - 循环槽细胞时获取超链接
- angular - 无法将 http 请求发布到 .Net Core 2.1 Web 项目
- graphql - Apollo 客户端本地状态 - LoggedIn 查询
- assembly - 十六进制值中的前导零