vue中input失去焦点时验证输入的数据是否存在

做vue项目的时候遇到了一个需求,在验证某个表单项时不仅需要是必填项而且要去通过接口校验输入的数据是否存在

1、给表单加:rules="rules",并且在data里面设置rules

rules: {
   name:[{required: true,message: '该项为必填项'},
      {trigger: 'blur',validator: checkValueNameIfExist}
     ],
}

 2、定义checkValueNameIfExist,并调用验证方法。

 data() {
    var checkValueNameIfExist = (rule, value, callback) => {
         if (value) {
          this.validateHas(value);//验证方法
          }
          callback();
        };
      return {}

     }

methods:{
  validateHas(value) {
        //从后台接口获取数据,把name传过去,如果res不为空则存在
        let param = {
           name:value,
          };
           this.$api.getDetailByName(param).then((data) => {
            let res = data.data.data
            res = JSON.parse(JSON.stringify(res));
            if (res == null) {
               this.$message.error('名称不存在')
            }
          })
      },

}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue ,我们可以通过在表单控件上绑定 `v-model` 指令来实现表单数据双向绑定。对于循环生成的表单控件,我们可以使用 `v-for` 指令来进行循环渲染。 要对循环生成的表单控件进行表单验证,我们可以使用自定义指令或者第三方库来实现。下面是使用自定义指令的示例代码: ```html <template> <form @submit.prevent="submitForm"> <div v-for="(item, index) in formItems" :key="index"> <label :for="'input-' + index">{{ item.label }}</label> <input :id="'input-' + index" v-model="item.value" v-validate:blur="item.rules" /> <span v-if="errors.has('input-' + index)" class="error">{{ errors.first('input-' + index) }}</span> </div> <button type="submit">提交</button> </form> </template> <script> export default { data() { return { formItems: [ { label: '用户名', value: '', rules: 'required|min:3|max:16' }, { label: '密码', value: '', rules: 'required|min:6|max:16' } ] } }, methods: { submitForm() { if (this.errors.any()) { return; } // 表单验证通过,可以提交表单数据 } }, directives: { validate: { inserted(el, binding) { const input = el.tagName === 'INPUT' ? el : el.querySelector('input'); input.addEventListener('blur', () => { const rules = binding.value.split('|'); const fieldName = input.id; const errors = validate(fieldName, input.value, rules); if (errors) { input.classList.add('error'); binding.instance.errors.add(fieldName, errors[0]); } else { input.classList.remove('error'); binding.instance.errors.remove(fieldName); } }); } } } } </script> <style> .error { color: red; } </style> ``` 在上面的示例代码,我们使用了 `v-validate` 指令来对表单控件进行验证,其 `v-validate:blur` 表示在输入失去焦点进行验证。我们通过自定义指令 `validate` 来实现表单验证的逻辑,在 `inserted` 钩子函数,我们使用了 `validate` 库来进行表单验证,并根据验证结果来添加或移除错误提示信息。在 `submitForm` 方法,我们通过 `this.errors.any()` 来判断表单是否验证通过。 需要注意的是,这里使用的是第三方库 `validate` 来进行表单验证,你需要先安装该库并引入。同,为了方便起见,这里的错误提示信息直接使用了 `validate` 库返回的第一个错误信息,你可以根据实际需求来自定义错误提示信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~犇犇~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值