FormGroup自定义验证器未触发问题求助
问题解决:FormGroup自定义验证器不触发的原因及修复
核心问题
你的validateQuantity是一个验证器工厂函数——它本身不是验证器,而是返回一个真正的FormGroup验证函数。
在FormBuilder代码中,你正确调用了这个工厂函数:validator: this.validateQuantity(),拿到了返回的验证函数;但直接new FormGroup时,你传的是工厂函数本身validators: this.validateQuantity,Angular无法识别并执行它。
修复步骤
1. 修正FormGroup的验证器参数
将createOrder方法中的FormGroup配置改为调用工厂函数:
private createOrder(): FormGroup { return new FormGroup( { produit: new FormControl('', Validators.required), document: new FormControl('', Validators.required), quantite: new FormControl('', Validators.required) }, { validators: this.validateQuantity() }); // 调用工厂函数获取验证器 }
2. 额外修正:FormControl初始化错误
你之前的FormControl写法new FormControl(['', Validators.required])存在问题——FormControl构造函数第一个参数是初始值,第二个是验证器。把初始值写成数组会导致表单值异常,甚至间接影响验证逻辑,改为直接传空字符串即可。
验证逻辑说明
修正后,Angular会正确执行validateQuantity()返回的验证函数:当produit、document、quantite的值变化时,自动触发验证逻辑,对比所选文档的qtteMax和输入的quantite,超出阈值时返回错误对象,HTML中的mat-error就能正常读取错误信息并显示提示。
内容的提问来源于stack exchange,提问作者Olivier
相关产品推荐
相关产品推荐

