资讯专栏INFORMATION COLUMN

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

zhangwang / 690人阅读

摘要:介绍在后端项目里比如我们的框架对于表单验证有自己的一套机制他将验证集成在我们只需要在我们的方法中依赖注入我们自己实例化后的验证类当然也可以直接去在方法里去验证表单数据而在我们的前端的项目里也就是在我们的项目里也有比较好的验证解决方案也就是这

介绍

在后端项目里 比如我们的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部分内容

用户名不能为空 用户名不能太短
邮箱不能为空 请填写正确的邮箱格式

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

Field is required.
Field is required.
Field is required.
Group is invalid.
validationGroup: {{ $v.validationGroup }}

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

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

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

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

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

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

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

在这里的验证规则流程是这样的 如果$errortrue那么form-group会添加一个form-group--error这个class
只有在$errortrue时 如果你不符合任意一个验证规则 例如不符合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验证

用户名已经被注册

显示结果应该是这样的:

5.自定义验证

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

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

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

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

github地址

package官网

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22473.html

相关文章

  • vue-cli vuelidate基于后端数据验证注册

    摘要:介绍在实现基本的验证之后我们需要去真正实现项目中的注册登录以及我们的验证流程有的具体的代码我也会放到我的上面后端以及数据准备对于前端的请求以作为后端项目需要对数据进行处理和相应的反馈我们可以先去创建在项目终端生成后就去定义好字段信息 介绍 在实现vuelidate基本的验证之后 我们需要去真正实现项目中的注册登录以及我们的验证流程 有的具体的代码我也会放到我的gist上面 后端api以...

    chunquedong 评论0 收藏0
  • 推荐给新手35个好用Vue开源库

    摘要:无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包。所幸的是,随着社区的不断壮大,每天都会出现一些很好的软件包。在下文中,我们将推荐一些非常好用的开源库是一个非常易用的渐进式框架,用于构建用户界面。的一个极简主义的深色设计系统。 无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包。对于开发者来说,如果没有这些开源软件包,很难想象我们的生活会变得多么疲惫不堪,而且靠咖啡度日也会成...

    oliverhuang 评论0 收藏0
  • vuejs2.0制作最简单顶部菜单滑动效果

    摘要:此方法可适用于普通页面,也可以是其他,使用相关样式即可。下面效果是横向滚动,也可以使用修改为垂直滚动。 此方法可适用于普通html页面,也可以是其他,使用相关css样式即可。下面效果是横向滚动,也可以使用overflow-y: scroll; 修改为垂直滚动。 主要代码部分: {{item.so...

    linkFly 评论0 收藏0
  • vuejs2.0 封装通用组件,build生成js,并发布到npm

    摘要:网上看了一些文章,一般都是把封装好的格式的文件发布到,感觉不太像一般组件的封装形式,故特意书写此文,希望能帮助到各位码友。本文以封装一个分页组件为例,把它生成目标文件,生成压缩包测试,并发布到。修改输出文件到下,生成文件名为。 网上看了一些文章,一般都是把封装好的.vue格式的文件发布到npm,感觉不太像一般组件的封装形式,故特意书写此文,希望能帮助到各位码友。 本文以封装一个分页...

    ZHAO_ 评论0 收藏0

发表评论

0条评论

zhangwang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<