element-ui表单验证,validator 的传参与复用

参考文档:https://www.jianshu.com/p/aeb77cb3e9aa

项目中有个场景,同一页面的不同Form中的两个日期函数需要进行校验,因为是不同的字段校验,所以校验函数需要传入不同的字段。下面是解决方法:

校验函数

export function startDateValidator(rule, value, callback, endDate) {

  if (!value) {

    callback(new Error('起始日期不能为空!'))

  } else {

    // 如果结束日期没选,cb

    if (!endDate) {

      callback()

    } else {

      // 结束日期有,进行判断

      const flag = new Date(endDate).getTime() >= new Date(value).getTime()

      if (flag) {

        // 如果起始在结束之前

        callback()

      } else {

        callback(new Error('起始日期不能在结束日期之后!'))

      }

    }

  }

}

export function endDateValidator(rule, value, callback, startDate) {

  if (!value) {

    callback(new Error('结束日期不能为空!'))

  } else {

    if (!startDate) {

      callback()

    } else {

      // 起始日期有

      const flag = new Date(value).getTime() >= new Date(startDate).getTime()

      if (flag) {

        callback()

      } else {

        callback(new Error('结束日期不能在起始日期之前!'))

      }

    }

  }

}

rules中:

form1

        startDate: [{ required: true, validator: (rule, value, callback) => {

          startDateValidator(rule, value, callback, this.form1.endDate)

        }, trigger: ['blur', 'change'] }],

        endDate: [{ required: true, validator: (rule, value, callback) => {

          endDateValidator(rule, value, callback, this.form1.startDate)

        }, trigger: ['blur', 'change'] }]

form2

        startDate: [{ required: true, validator: (rule, value, callback) => {

          startDateValidator(rule, value, callback, this.form2.endDate)

        }, trigger: ['blur', 'change'] }],

        endDate: [{ required: true, validator: (rule, value, callback) => {

          endDateValidator(rule, value, callback, this.form2.startDate)

        }, trigger: ['blur', 'change'] }]

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值