vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】

简介: vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】

1.jpg

50.(了解)表单校验插件

说明

(1) 项目中有一些如注册/登陆表单, 在提交请求前是需要进行表单输入数据校验的

(2) 只有前台表单验证成功才会发请求

(3) 如果校验失败, 以界面红色文本的形式提示, 而不是用alert的形式

(4) 校验的时机, 除了点击提交时, 还有输入过程中实时进行校验

安装命令:cnpm install --save vee-validate@2

版本兼容:

image.png

使用步骤:

  1. 安装插件
  2. 在src/main.js引入表单校验插件
//引入表单校验插件
import "@/plugins/validate";
  1. 在plugins文件夹下新建validates.js文件,配置校验规则
//vee-validate插件:表单验证区域’
import Vue from "vue";
import VeeValidate from "vee-validate";
//中文提示信息
import zh_CN from "vee-validate/dist/locale/zh_CN";
Vue.use(VeeValidate);

//表单验证
VeeValidate.Validator.localize("zh_CN", {
    messages: {
        ...zh_CN.messages,
        is: (field) => `${field}必须与密码相同`, // 修改内置规则的 message,让确认密码和密码相同
    },
    attributes: {
        phone: "手机号",
        code: "验证码",
        password: "密码",
        passwordConfirm: "确认密码",
        checkedAgreement:'协议'
    },
});

//自定义校验规则
VeeValidate.Validator.extend("tongyi", {
    validate: (value) => {
        return value;
    },
    getMessage: (field) => field + "必须同意",
});
  1. 在需要校验的组件内使用,主要添加v-validate、:class、errors.has、errors.first,另外方法再加入一行判断是否全部交验通过的操作
<input placeholder="请输入你的手机号" v-model="phone" name="zai" v-validate="{ required: true, regex: /^1\d{10}$/ }" :class="{ invalid: errors.has('phone') }"
        />
<span class="error-msg">{
  { errors.first("phone") }}</span>

const success = await this.$validator.validateAll();
if (success) {
    ...
}

修改代码:

src/main.js

//引入表单校验插件
import "@/plugins/validate";

src/plugins/validate.js

//vee-validate插件:表单验证区域’
import Vue from "vue";
import VeeValidate from "vee-validate";
//中文提示信息
import zh_CN from "vee-validate/dist/locale/zh_CN";
Vue.use(VeeValidate);

//表单验证
VeeValidate.Validator.localize("zh_CN", {
    messages: {
        ...zh_CN.messages,
        is: (field) => `${field}必须与密码相同`, // 修改内置规则的 message,让确认密码和密码相同
    },
    attributes: {
        phone: "手机号",
        code: "验证码",
        password: "密码",
        passwordConfirm: "确认密码",
        checkedAgreement:'协议'
    },
});

//自定义校验规则
VeeValidate.Validator.extend("tongyi", {
    validate: (value) => {
        return value;
    },
    getMessage: (field) => field + "必须同意",
});

src/pages/Register/index.vue

<div class="content">
        <label>手机号:</label>
        <input placeholder="请输入你的手机号" v-model="phone" name="zai" v-validate="{ required: true, regex: /^1\d{10}$/ }" :class="{ invalid: errors.has('phone') }"
        />
        <span class="error-msg">{
  { errors.first("phone") }}</span>
      </div>
      <div class="content">
        <label>验证码:</label>
        <input placeholder="请输入你的验证码" v-model="code" name="code" v-validate="{ required: true, regex: /^\d{6}$/ }" :class="{ invalid: errors.has('code') }"
        />
        <button style="width:100px;height:38px" @click="getCode">
          获取验证码
        </button>
        <span class="error-msg">{
  { errors.first("code") }}</span>
      </div>
      <div class="content">
        <label>登录密码:</label>
        <input placeholder="请输入你的密码" v-model="password" name="password" v-validate="{ required: true, regex: /^[0-9A-Za-z]{8,20}$/ }" :class="{ invalid: errors.has('password') }"
        />
        <span class="error-msg">{
  { errors.first("password") }}</span>
      </div>
      <div class="content">
        <label>确认密码:</label>
        <input placeholder="请输入确认密码" v-model="passwordConfirm" name="passwordConfirm" v-validate="{ required: true, is: password }" :class="{ invalid: errors.has('passwordConfirm') }"
        />
        <span class="error-msg">{
  { errors.first("passwordConfirm") }}</span>
      </div>
      <div class="controls">
        <input type="checkbox" v-model="checkedAgreement" name="checkedAgreement" v-validate="{ required: true, tongyi: true }" :class="{ invalid: errors.has('checkedAgreement') }"
        />
        <span>同意协议并注册《尚品汇用户协议》</span>
        <span class="error-msg">{
  { errors.first("checkedAgreement") }}</span>
      </div>

async registerUser() {
        try {
           //成功
          const success = await this.$validator.validateAll();
          //全部表单验证成功,在向服务器发请求,进行祖册
          //只要有一个表单没有成功,不会发请求
          if (success) {
            const {phone, code, password, passwordConfirm} = this
            await this.$store.dispatch('registerUser', {phone, password, code})
            //注册成功进行路由的跳转
            this.$router.push('/login')
          }
        } catch (error) {
           //失败
           alert(error.message)
        }
},

注意点0:这个插件只了解即可,因为查看github发现使用规则还很复杂不易用且不容易记住,后续可以使用饿了吗element校验规则。

注意点1:该插件注意版本兼容,比如VUE2还是VUE3。

注意点2:

问题:form表单中为啥要有name属性?

答案:为了区分不同的标签元素。

注意点3:errors.has、errors.first里面的字符串一定要和data中定义的属性名一致。

注意点4:validate.js文件中引入import zh_CN from "vee-validate/dist/locale/zh_CN";是因为该插件默认显示英文错误提示信息,引入语言后就自动转换为中文了。

注意点5:attributes中的属性就是对应组件内data定义的属性名称,默认显示data属性名,所以需要转义,这里定义中文,就会进行相应解析转换的。

注意点6:validate.js文件中可以自定义校验规则,比如勾选框的“tongyi”

注意点7:注册方法一定要记得加const success = await this.$validator.validateAll();,它就用来代表表单校验规则是否全部通过的。

本人其他相关文章链接

1.vue尚品汇商城项目-day07【44.个人中心二级路由搭建+45.我的订单+46.优化登录跳转+47.独享守卫】
2.vue尚品汇商城项目-day07【vue插件-48.(了解)图片懒加载插件】
3.vue尚品汇商城项目-day07【vue插件-49.(了解)自定义插件】
4.vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
5.vue尚品汇商城项目-day07【51.路由懒加载】
6.vue尚品汇商城项目-day07【52.打包文件,处理map文件】
7.vue尚品汇商城项目-day07【53.nginx反向代理配置】
8.vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
9.vue尚品汇商城项目-day07【55.编码测试与打包发布项目】

目录
相关文章
|
16天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
2天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
15天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
15天前
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1047 0
|
2天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
2天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
2天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
2天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
3天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。