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

前端之家收集整理的这篇文章主要介绍了详解vuelidate 对于vueJs2.0的验证解决方案前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

介绍

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

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

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

1.安装

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

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

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

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

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

required,minLength } = require('vuelidate/lib/validators')

2.使用

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

1.注册验证

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

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

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

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

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

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

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

required,minLength: minLength(2) },email: { required,email } } },

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

用户名
required">用户名不能为空 用户名不能太短

<div class="control-group" v-bind:class="{ 'form-group--error': $v.newUser.email.$error }">
<label class="control-label">邮箱
<el-input
placeholder="请输入你的邮箱"
v-model.trim="newUser.email"
@input="$v.newUser.email.$touch()"

required">邮箱不能为空

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

required">Field is required.
required">Field is required.
required">Field is required.
validationGroup: {{ $v.validationGroup }}

我们先这样举例 值得注意的是我们需要去知道他的$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--error input,.form-group--error input:focus,.form-group--error input:hover,.form-group--error textarea {
border-color: #CC3333;
}

2.密码验证

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

3.组合验证

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

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

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

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

4.异步验证

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

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

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

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

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

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作为后端来提供的数据校验 实际项目中的话可以再结合数据库

'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验证

代码如下:
用户名已经被注册

显示结果应该是这样的:

5.自定义验证

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

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

{ if (Array.isArray(value)) return !!value.length

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

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

猜你在找的Vue相关文章