Angular使用自定义验证器时formBuilder.group显示废弃如何解决
问题产生原因
Angular v14及以上版本中,FormBuilder.group() 的旧版配置签名已被标记为废弃:旧签名允许在第二个配置参数中传入单数形式的validator、asyncValidator字段设置表单组级验证器,该设计不支持多验证器数组传入,灵活性不足,因此被官方替换为新签名。
代码中配置对象使用了单数validator字段传入自定义验证器,匹配到了即将移除的旧方法签名,因此触发废弃提示。当前验证逻辑可正常运行,但后续框架大版本升级后会直接抛出语法错误。
自定义验证器ConfirmedValidator本身逻辑无问题,无需修改。
修复方案
仅需将formBuilder.group()第二个配置参数内的单数validator字段,修改为复数形式的validators即可,修正后的表单初始化代码如下:
ngOnInit() { // Create user password form this.cupForm = this.formBuilder.group({ password: [null, Validators.pattern('^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\\w\\s]).{8,}$')], confirm_password: [null, Validators.required] }, { validators: ConfirmedValidator('password', 'confirm_password') }); }
新签名支持直接传入验证器数组配置多个表单组级验证器,例如需要新增其他跨字段校验规则时可按如下写法扩展:
validators: [ ConfirmedValidator('password', 'confirm_password'), // 其他表单组级验证器 ]
补充:如果表单组需要配置异步验证器,旧版单数形式的
asyncValidator字段也需要同步改为复数形式的asyncValidators。
内容的提问来源于stack exchange,提问作者user10114552
相关产品推荐
相关产品推荐

