需求:当用户登录时,会输入用户名和密码,用户名不能为空,密码的长度不能小于6位。需要在用户在点击登录按钮前,进行验证是否通过我们设定的规则,如果通过则放行,如果不通过则会进行提示。
(1)在el-form中绑定rules,同时v-mode绑定存储表单数据的变量,ref用于对表单元素进行标记,后面点击登录时,会获取表单,判断表单中的字段是否都通过验证规则。
<el-form :model="loginForm" :rules="loginRules" ref="loginForm">
(2)在el-form-item中设定prop属性,这里的属性值需与rules中的属性值保持一致。
<el-form-item prop="username">el-form-item>
data(){
return {
loginForm: {
username: "admin",
password: "111111",
},
loginRules: {
username: [
{ required: true, trigger: "blur", validator: validateUsername },
],
password: [
{ required: true, trigger: "blur", validator: validatePassword },
],
},
}
required表示必须输入字段
trigger表示用户行为,常用blur表示失去焦点
这里自定义规则的方法的调用是写在了rule里面,即validator当中
必须要写callback()
// 验证用户名以及密码
const validateUsername = (rule, value, callback) => {
callback();
if (!value) {
callback(new Error("请输入用户名"));
} else {
callback();
}
};
const validatePassword = (rule, value, callback) => {
if (value.length < 6) {
callback(new Error("密码长度不能小于6位"));
} else {
callback();
}
};
npm install vee-validate --save
创建一个validate的js文件,在里面使用插件,编写验证规则
在main.js中引入这个js文件
这里涉及到了四个验证规则
<span class="error-msg">{{ errors.first("password2") }}span>
这两种方式进行对比,个人感觉没有第一种方式灵活,且第二种上手要难点。不过第二种的代码量要比第一种少。