Ant Design的RangePicker组件实现必填校验

1 篇文章 0 订阅
1 篇文章 0 订阅

 

需求

在前端页面开发中,对输入参数进行必填校验是很普遍的需求。项目组使用的前端开发架构为基于React的Ant Design Pro,设置前端组件的校验规则通常为框架自带的required: true即可,如下:

<Form.Item {...formItemLayout} label="名称" key={'name'}>
                {getFieldDecorator('name', {
                  initialValue: data.name,
                  rules: [
                    {
                      required: true,
                      message: '请输入升级名称',
                    },
                  ],
                })(<Input placeholder="请输入名称" disabled={isView} />)}
              </Form.Item>

现象

然而,使用RangePicker组件的时候,仅仅使用required这条必填校验规则就会出现下面两种情况:

情况1:不点击RangePicker组件进行选择日期,直接提交表单,表单不会提示RangePicker组件的内容没有填,即校验不生效。

情况2:点击RangePicker组件进行选择日期,然后又清空日期,再点击表单提交,表单提示RangePicker组件的内容没有填,即校验生效。

解决

上述现象表名required校验规则能对RangePicker组件起作用,只是不能完全满足需求。

研究和调试发现,在受控于Form组件的表单项中,RangePicker的值是一个带有2个Moment类型元素的数组,不选择日期的时候两个元素为undefined,此为情况1;选择日期然后又清空后,数组被清空,长度变为0,此为情况2。由于required: true只校验情况2,所以要自定义校验规则才能满足RangePicker组件的校验需求。

自定义如下校验规则即可实现RangePicker组件的必填校验。

<Form.Item {...formItemLayout} label="升级时间" key={'updateTime'}>
                {getFieldDecorator('updateTime', {
                  initialValue: [data.updateStartTime ? moment(data.updateStartTime, 'YYYY-MM-DD HH:mm:ss') : null,
                    data.updateEndTime ? moment(data.updateEndTime, 'YYYY-MM-DD HH:mm:ss') : null],
                  rules: [
                    {
                      required: true,
                      message: '请选择升级时间',
                    },
                    {
                      // 自定义校验规则
                      validator: (rule, value, callback) => {
                        if (value.length === 2) {
                          if (!value[0] || !value[1]) {
                            callback('请选择升级时间')
                          } else {
                            // callback不传参数表示校验通过
                            callback()
                          }

                        } else {
                          callback('请选择升级时间')
                        }
                      }
                    }
                  ],
                })(<RangePicker showTime={true} style={{width: '100%'}} disabled={isView}/>)}
              </Form.Item>

注意,在自定义规则上面仍然使用required校验规则,是为了显示表单项前面的必填标记。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Ant Design Vue 是一个非常受欢迎的 UI 组件库,它提供了丰富的表单组件,包括输入框、下拉选择框等等。要实现动态添加表单必填校验,可以按照以下步骤进行操作: 1. 首先,引入 Ant Design Vue 的 Form 组件和相应的验证规则模块,例如 `required` 必填规则。 2. 在 Vue 的 data 中定义一个表单对象,包含需要动态添加的表单控件的值。 3. 在模板中使用 Ant Design Vue 的 Form 组件,并使用 v-model 指令将表单对象和控件的值进行绑定。 4. 使用 v-for 指令遍历需要动态添加的表单控件,通过一个数组来提供控件的模板。 5. 在表单控件的模板中,使用 :rules 属性绑定验证规则,例如 `:rules="[{ required: true, message: '该字段为必填项' }]` 6. 在模板中提供一个按钮或其他交互方式,用来触发动态添加表单控件的操作。 7. 当点击按钮时,通过修改表单对象的属性或者添加新的属性,实现动态添加表单控件。 8. 提交表单时,通过调用 validate 方法对表单进行校验,这会触发相关的验证规则。 9. 根据校验结果,可以在模板中展示错误信息或者处理其他逻辑。 需要注意的是,动态添加表单必填校验时,需要在动态添加表单控件的同时,将相应的验证规则也添加到表单对象中。另外,为了方便校验和错误信息的展示,建议使用对应的验证规则模块和提示文本。 这样,通过上述步骤,就可以实现 Ant Design Vue 动态添加表单必填校验了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值