You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

问题: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 08:12:35