问题:Formly中Prime Input Mask失焦时错误被重置,需保留错误
问题:Formly应保留inputmask的错误,而非将其清空
问题场景
我在inputMask字段和普通input字段的模型变更时,都会把invalid错误设为true。但输入值并失焦后,inputMask绑定的错误会自动消失,普通input字段的错误却能正常保留,这不符合预期。
解决方法
这个问题的根源是inputmask组件在失焦时会触发内部逻辑,自动清除错误状态。要解决的话,得从三个地方入手:
1. 重写input-mask组件的失焦逻辑
在input-mask.component.ts里,跳过组件自带的错误清除逻辑,手动保留已设置的错误状态:
onBlur() { const ctrl = this.formControl; if (ctrl.hasError('invalid')) { // 重新设置错误,防止被组件内部逻辑清空 ctrl.setErrors({ ...ctrl.errors, invalid: true }); } }
2. 配置Formly字段的验证规则
定义Formly字段时,通过validation选项明确错误提示,同时确保自定义错误不会被组件默认逻辑覆盖:
{ key: 'maskedInput', type: 'input-mask', props: { label: '带掩码的输入框', }, validation: { messages: { invalid: '输入格式不正确', }, }, }
3. 模型变更时强制锁定错误状态
在模型变更的回调里,设置错误后标记控件为已触碰和脏状态,避免Formly自动清除错误:
onModelChange(field, value) { field.formControl.setErrors({ invalid: true }); // 标记控件已被操作,确保错误持续显示 field.formControl.markAsTouched(); field.formControl.markAsDirty(); }
这样处理后,inputmask字段的invalid错误就会和普通input字段一样,在失焦后依然保留,不会被自动清空。
内容的提问来源于stack exchange,提问作者duddu sai lokesh
相关产品推荐
相关产品推荐

