全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解vuelidate 对于vueJs2.0的验证解决方案

介绍

在后端项目里 比如我们的Laravel框架 对于表单验证有自己的一套validation机制 他将验证集成在FormRequest

我们只需要在我们的方法中依赖注入我们自己实例化后的验证类 当然也可以直接去在方法里去验证表单数据

而在我们的前端的项目里 也就是在我们的vue项目里 也有比较好的验证解决方案 也就是这的vuelidate

1.安装

和我们安装前端包一样 在项目终端执行:

$ npm install vuelidate --save

安装完成后和我们去使用vuex一样 在main.js去引入声明这个package:

import Vue from 'vue'
import Vuelidate from 'vuelidate'
Vue.use(Vuelidate)

当然你也可以在需要用到验证的组件里去引用一个相对小的版本:

import { validationMixin } from 'vuelidate'

var Component = Vue.extend({
 mixins: [validationMixin],
 validation: { ... }
})

如果你偏好通过require这样的形式 你也可以这样引入:

const { validationMixin, default: Vuelidate } = require('vuelidate')
const { required, minLength } = require('vuelidate/lib/validators')

2.使用

其实使用起来真的很方便 下面举例来说就是在我的项目里的使用

1.注册验证

在用户注册时 我们通常的需要处理的表单字段就是name,email,password,confirm_pwd

首先我在Register.vue这个组件文件中把基本的样式结构写好 这取决于每个人

接着是我们对表单数据的验证:

这里是对用户名和邮箱的验证 就像之前提到的 我们先引入我们的验证规则:

import { required,minLength,between,email } from 'vuelidate/lib/validators'

因为我是对一个新用户的注册 所以我定义一个data

 data(){
  return{
    newUser: {
      name:'',
      email:'',
      password:'',
      confirm_pwd:''
    },
  }
},

接着去定义我们的验证字段的规则:

validations: {
  newUser:{
    name: {
      required,
      minLength: minLength(2)
    },
    email: {
      required,email
    }
  }
},

定义这些验证规则之后 下面是我的html部分内容

<div class="control-group" v-bind:class="{ 'form-group--error': $v.newUser.name.$error }">
<label class="control-label">用户名</label>
<el-input
    placeholder="请输入你的用户名"
    v-model.trim="newUser.name"
    @input="$v.newUser.name.$touch()"
>
</el-input>
</div>
<span class="form-group__message" v-if="!$v.newUser.name.required">用户名不能为空</span>
<span class="form-group__message" v-if="!$v.newUser.name.minLength">用户名不能太短</span>

<div class="control-group" v-bind:class="{ 'form-group--error': $v.newUser.email.$error }">
<label class="control-label">邮箱</label>
<el-input
    placeholder="请输入你的邮箱"
    v-model.trim="newUser.email"
    @input="$v.newUser.email.$touch()"
>
</el-input>
</div>
<span class="form-group__message" v-if="!$v.newUser.email.required">邮箱不能为空</span>
<span class="form-group__message" v-if="!$v.newUser.email.email">请填写正确的邮箱格式</span>

每个人可以都不一样 官方文档上也给出了demo:

<div>
 <div class="form-group" v-bind:class="{ 'form-group--error': $v.flatA.$error }">
  <label class="form__label">Flat A</label>
  <input class="form__input" v-model.trim="flatA" @input="$v.flatA.$touch()">
 </div><span class="form-group__message" v-if="!$v.flatA.required">Field is required.</span>
 <div class="form-group" v-bind:class="{ 'form-group--error': $v.flatB.$error }">
  <label class="form__label">Flat B</label>
  <input class="form__input" v-model.trim="flatB" @input="$v.flatB.$touch()">
 </div><span class="form-group__message" v-if="!$v.flatB.required">Field is required.</span>
 <div class="form-group" v-bind:class="{ 'form-group--error': $v.forGroup.nested.$error }">
  <label class="form__label">Nested field</label>
  <input class="form__input" v-model.trim="forGroup.nested" @input="$v.forGroup.nested.$touch()">
 </div><span class="form-group__message" v-if="!$v.forGroup.nested.required">Field is required.</span>
 <div class="form-group" v-bind:class="{ 'form-group--error': $v.validationGroup.$error }"></div><span class="form-group__message" v-if="$v.validationGroup.$error">Group is invalid.</span>
 <pre>validationGroup: {{ $v.validationGroup }}</pre>
</div>

我们先这样举例 值得注意的是我们需要去知道他的$v.name里面的内容

也就是 $invalid $dirty $error $pending $each 这个value

特别的注意 $error里的解释:It is a shorthand to $invalid && $dirty

也就是一个与的组合 你可以去试着改变这两者的值 再去看$error的值

当然还有两个重要的方法: $touch $reset 上面也有实例 说简单点就是设置这个以及子节点的$dirty 为true或者false

而设置这个$dirty 再结合 $invalid就可以判断验证成功与否

$error 是由$dirty和$invalid共同决定的

在这里的验证规则流程是这样的 如果$error为true那么form-group会添加一个form-group--error这个class

只有在$error为true时 如果你不符合任意一个验证规则 例如不符合required 那么就会提示验证失败

如果验证错误就给出错误提示 这是我的错误样式:

.form-group__message{
  display: none;
  font-size: .95rem;
  color: #CC3333;
  margin-left: 10em;
  margin-bottom: 12px;
}
.form-group--error+.form-group__message {
  display: block;
  color: #CC3333;
}

.form-group--error input, .form-group--error input:focus, .form-group--error input:hover, .form-group--error textarea {
  border-color: #CC3333;
}

2.密码验证

密码验证其实和上面的差不多 只不过他的验证规则时通过 sameAs 来进行验证的

3.组合验证

除了上面这些还有一个组合验证 也就是如果任意一个不符合验证规则就不通过 这个还是挺常用的

我们可以在验证字段这样去组合:

validations: {
  flatA: { required },
  flatB: { required },
  forGroup: {
   nested: { required }
  },
  validationGroup: ['flatA', 'flatB', 'forGroup.nested']
}

如果任意一个就是FlatA flatB forGroup其中一个不符合验证规则 那么$v.validationGroup.$error就是false

4.异步验证

特别是在验证唯一性的时候 我们肯定会遇到这样的一个场景:

就比如我们的邮箱 如果已经注册过这个邮箱了 那么再用这个邮箱去注册显然不是我们想要的

还有就是我们登录时我们需要去核对我们的用户的密码

这边我给出的实例就是对于用户名的注册 如果已经注册了就会提示已经注册过

完全支持async/await语法。它与Fetch API结合使用也很出色 那么我们可以通过后端API提供的结果可以进行判断
我们可以去增加我们唯一性的验证:

name: {
  required,
  minLength: minLength(4),
  async isUnique (value) {
    if (value === '') return true
    const response = await fetch(`http://localhost:8000/api/unique/name/${value}`)
    return Boolean(await response.json())
  }
},

这里我现在本地测试 通过Laravel作为后端来提供的数据校验 实际项目中的话可以再结合数据库

//用户验证路由
Route::group(['prefix'=>'unique','middleware'=>['api','cors']], function () {
  Route::get('/name/{value}',function(Request $request,$value){
    if($value==="gavin"){
      return response()->json(false);
    }
    return response()->json(true);
  });
});

如果我们去注册 gavin这个用户就会提示该昵称已经被注册 因为在用户名我增加了isUnique验证

复制代码 代码如下:
<span class="form-group__message" v-if="!$v.newUser.name.isUnique">用户名已经被注册</span>

显示结果应该是这样的:

5.自定义验证

同样的我们不仅可以使用它提供给我们的验证规则 我们也可以自定义验证规则并与之前的进行组合

官方给出了一个简单实例:

export default value => {
 if (Array.isArray(value)) return !!value.length

 return value === undefined || value === null
  ? false
  : !!String(value).length
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vuelidate  # 使用  # vue2.0  # 验证  # Vue实现父子组件的事件传递的示例代码  # Vue3中父子组件之间相互通信的方式详解  # Vue实现父子组件之间的数据传递  # Vue中非父子组件通信的方法小结  # vue @vuelidate父子组件绑定注意事项  # 不符合  # 就会  # 表单  # 我们可以  # 如果你  # 也有  # 是这样  # 每个人  # 请输入  # 自定义  # 里去  # 你也可以  # 在我们的  # 为空  # 自己的  # 的是  # 后端  # 是一个  # 这是  # 我是 


相关文章: 韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  c# 在ASP.NET Core中管理和取消后台任务  网站设计制作公司地址,网站建设比较好的公司都有哪些?  Swift中swift中的switch 语句  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  高防服务器租用如何选择配置与防御等级?  高端云建站费用究竟需要多少预算?  ,网站推广常用方法?  已有域名和空间如何搭建网站?  ,如何利用word制作宣传手册?  广州建站公司哪家好?十大优质服务商推荐  5种Android数据存储方式汇总  如何快速搭建自助建站会员专属系统?  股票网站制作软件,网上股票怎么开户?  如何选择PHP开源工具快速搭建网站?  IOS倒计时设置UIButton标题title的抖动问题  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何正确下载安装西数主机建站助手?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  建站之星代理费用多少?最新价格详情介绍  建站之星logo尺寸如何设置最合适?  如何在景安服务器上快速搭建个人网站?  详解jQuery停止动画——stop()方法的使用  定制建站流程解析:需求评估与SEO优化功能开发指南  建站之星云端配置指南:模板选择与SEO优化一键生成  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何用低价快速搭建高质量网站?  深圳网站制作的公司有哪些,dido官方网站?  建站之星3.0如何解决常见操作问题?  表情包在线制作网站免费,表情包怎么弄?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  教程网站设计制作软件,怎么创建自己的一个网站?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  网站制作话术技巧,网站推广做的好怎么话术?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  建站之星ASP如何实现CMS高效搭建与安全管理?  建站之星如何保障用户数据免受黑客入侵?  如何批量查询域名的建站时间记录?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  建站VPS推荐:2025年高性能服务器配置指南  购物网站制作公司有哪些,哪个购物网站比较好?  建站主机选购指南:核心配置优化与品牌推荐方案  如何实现建站之星域名转发设置?  如何登录建站主机?访问步骤全解析  如何快速生成专业多端适配建站电话?  如何通过VPS建站无需域名直接访问? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。