vue项目中使用vee-validate的全程心得

前言:

做后台管理类项目的时候,每个页面都有大量的输入框需要校验, 并且各个页面还有相同的字段需要校验,比如有好几个页面需要输入用户名、密码等等,这在前端至少都要校验格式,又不想多写一句代码,所以...

根据大佬们的博客和自己的实践总结了一篇。

目录

 

1.安装 

2.使用步骤

(1)创建一个js文件,例如:validator.js,将验证的代码都放在这个js文件中;

(2)在main.js中引入这个js文件

(3)validator.js代码【详解往下翻】

(4)可能报错的情况

(5)在组件中的使用,以验证端口为例子


1.安装 

npm install vee-validate --save

2.使用步骤

(1)创建一个js文件,例如:validator.js,将验证的代码都放在这个js文件中;

(以我的项目中存放的位置为例:src/api/validator.js)

(2)在main.js中引入这个js文件

// 引入表单验证插件
import './api/validator.js'

(3)validator.js代码【详解往下翻】

import Vue from 'vue'
import VeeValidate, { Validator } from 'vee-validate'
import zh from 'vee-validate/dist/locale/zh_CN' // 引入中文文件

Validator.addLocale(zh)

const config = {
  locale: 'zh_CN',
  fieldsBagName: 'fieldBags'
}

Vue.use(VeeValidate, config)

// 自定义validate
const dictionary = {
  zh_CN: {
    messages: {
      required: (field) => '请输入' + field,
      number: (field) => field + '必须为数值',
      url: () => '请输入正确格式的服务器地址',
      ip: () => '请输入正确的IP地址'
    },
    attributes: {
      ip: 'IP地址',
      httpPort: 'HTTP端口'
    }
  }
}
Validator.updateDictionary(dictionary)

// 1.IPV4地址
Validator.extend('ipAddr', {
  messages: {
    zh_CN: field => '请输入正确的IPV4地址'
  },
  validate: value => {
    return /^((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))$/.test(value)
  }
})

// 2.端口【0~65535】
Validator.extend('port', {
  messages: {
    zh_CN: field => '请输入正确格式的端口号'
  },
  validate: value => {
    return /^([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{4}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/.test(value)
  }
})

(4)可能报错的情况

错误一:引入并配置中文文件

解决:

这是因为vee-validate的版本问题,回退到2.0.0-rc.25就可以了。

可以先卸载:npm uninstall vee-validate,

然后安装旧版版本: npm install vee-validate@2.0.0-rc.25

错误二:发生属性冲突的情况

解决:

const config = {
  fieldsBagName: 'fieldBags'
}

参考地址:https://www.jianshu.com/p/63d9540040af

(5)在组件中的使用,以验证端口为例子

<el-input v-validate="'required|port'" v-model="portForm.Http" name="httpPort"/>
<span v-show="errors.has('httpPort')" class="text-style"> {{ errors.first('httpPort') }} </span>
  • input中需要有name属性,name="httpPort",在提示中会显示“HTTP端口”
  • v-validate 属性:管道形式进行过滤,验证条件。官方已有的验证条件:required,email,ip等等,也可以使用自己定义的验证条件,这里是端口的输入框,需要满足必填和端口的格式
  • 错误提示

在输入框下方提示,如上面的代码;

我的项目中是在保存的时候提示,获取所有的错误信息,提示第一个,没有错误信息则发送保存参数请求;

// 点击保存
    handleSave() {
      this.$validator.validate().then(result => {
        if (!result) {
          this.$message.warning(this.errors.all()[0])
          return
        } else {
          this.handleSaveParam()
        }
      })
    }

或者获取单个输入框的验证信息:

    this.$validator.validate().then(result => {
        if (!result) {
          if (this.errors.has('httpPort')) {
            this.$message.warning(this.errors.collect('httpPort')[0])
            return
          }
          this.handleSavePortParam()
        } else {
          this.handleSavePortParam()
        }
      })

获取错误信息合集

errors.first('field') -- 获取关于当前field的第一个错误信息
collect('field') -- 获取关于当前field的所有错误信息(list)
has('field') -- 当前filed是否有错误(true/false)
all() -- 当前表单所有错误(list)
any() -- 当前表单是否有任何错误(true/false)

参考地址:

https://blog.csdn.net/docallen/article/details/73650179

https://blog.csdn.net/weixin_39107093/article/details/78584059

https://www.jianshu.com/p/63d9540040af

 


总结:好了,这就是根据我的实践和大佬们的博客整理的了,大家有什么问题欢迎留言,我随时改进,谢谢。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Vue 3 和 VeeValidate 是两个独立的库,可以一起使用来进行表单验证。下面是一些关于 Vue 3 和 VeeValidate 的基本信息: 1. Vue 3:Vue 3 是一款流行的 JavaScript 框架,用于构建用户界面。它提供了一套简洁的语法和强大的功能,使开发者可以轻松构建交互式的前端应用程序。 2. VeeValidateVeeValidate 是一个基于 Vue.js 的表单验证库。它提供了一组强大的验证规则和错误消息处理机制,方便开发者对表单进行验证和提示用户错误。 在 Vue 3 使用 VeeValidate,你需要按照以下步骤进行设置: 1. 安装 VeeValidate: ``` npm install vee-validate@next ``` 2. 在你的 Vue 3 项目导入 VeeValidate: ```javascript import { createApp } from 'vue'; import { createRouter, createWebHistory } from 'vue-router'; import { createI18n } from 'vue-i18n'; import { ValidationProvider, extend } from 'vee-validate'; import { required, email } from '@vee-validate/rules'; // 添加验证规则 extend('required', required); extend('email', email); const app = createApp(App); const router = createRouter({ history: createWebHistory(), routes, }); const i18n = createI18n({ locale: 'en', messages: { en: { validation: { required: 'This field is required.', email: 'Please enter a valid email address.', }, }, }, }); app.use(router); app.use(i18n); app.component('ValidationProvider', ValidationProvider); app.mount('#app'); ``` 3. 在你的 Vue 3 组件使用 VeeValidate: ```vue <template> <ValidationProvider v-slot="{ errors }" rules="required|email" name="email"> <input v-model="email" type="text" placeholder="Email"> <span>{{ errors[0] }}</span> </ValidationProvider> </template> <script> import { ref } from 'vue'; export default { name: 'MyForm', setup() { const email = ref(''); return { email, }; }, }; </script> ``` 通过以上步骤,你可以在 Vue 3 使用 VeeValidate 来进行表单验证。你可以根据自己的需要添加其他验证规则和自定义错误消息。希望对你有所帮助!如果还有其他问题,请随时提问。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值