参考文档:

https://cn.vuejs.org/v2/guide/custom-directive.html
https://www.cnblogs.com/ilovexiaoming/p/6840383.html

实例代码:

<template>
<div id="app" class="app">
<h3>{{msg}}</h3>
<div class="input">
<input type="text" v-input v-focus ><span>{{msg1}}</span>
</div>
<div class="input">
<input type="text" v-input v-required ><span>{{msg2}}</span>
</div>
<div class="input">
<!-- required:true/false 表示这个是必填项 -->
<input type="text" v-input v-checked="{required:true,}" ><span>{{msg3}}</span>
</div>
<div class="input">
<!-- <input type="text" v-input v-validate="'required|min(6)|max(3)|minlength(2)|minlength(10)|regex([0~6])'"> -->
<input type="text" v-input v-validate="'required|min(2)|max(20)|minlength(6)|maxlength(12)'"><span>{{tipsMsg}}</span>
</div>
</div>
</template> <script>
export default {
name: 'App',
data () {
return {
msg: '指令',
tipsBorderColor:'red',
msg1: '最简单的指令',
msg2: '验证不能为空的指令',
msg3: '进行正则验证',
tipsMsg:'',
}
},
directives: {
// 修饰input框的指令
input: {
// 当被绑定的元素插入到DOM上的时候
inserted: function(el){
el.style.width = "300px";
el.style.height = "35px";
el.style.lineHeight = "35px";
el.style.background = "#ddd";
el.style.fontSize = "16px";
el.style.border = "1px solid #eee";
el.style.textIndent = "5px";
el.style.textIndent = "8px";
el.style.borderRadius = "5px";
}
},
// input框默认选中的指令
focus:{
inserted:function(el){
el.focus();
}
},
// 不能为空的指令
required:{
inserted: function(el){
el.addEventListener('blur',function(event){
if(el.value == '' || el.value == null){
el.style.border = "1px solid red";
console.log('我不能为空');
};
});
}
},
// 验证指令
checked:{
inserted: function(el){ }
},
// 验证
validate: {
inserted:function(el,validateStr){
// 将验证规则拆分为验证数组
let validateRuleArr = validateStr.value.split("|");
console.log(validateStr);
console.log(validateRuleArr);
// 监听失去焦点的时候
el.addEventListener('blur',function(event){
console.log(typeof(el.value));
//失去焦点进行验证
checkedfun();
});
// 循环进行验证
function checkedfun(){
for(var i=0; i<validateRuleArr.length; ++i){
let requiredRegex = /^required$/; // 判断设置了required
let minRegex = /min\(/; //判断设置了min 最小值
let maxRegex = /max\(/; //判断设置了max 最大值
let minlengthRegex = /minlength\(/; //判断设置了 minlength 最大长度
let maxlengthRegex = /maxlength\(/; //判断设置了 maxlength 最大长度
// 判断是否是 required 调用 require的方法
if(requiredRegex.test(validateRuleArr[i])){
if(!required()){break;};
};
// 判断是否设置了最小值
if(minRegex.test(validateRuleArr[i])){
if(!eval(validateRuleArr[i])){break;};
};
// 判断是否设置了最大值
if(maxRegex.test(validateRuleArr[i])){
if(!eval(validateRuleArr[i])){break;};
};
// 判断设置了最小长度
if(minlengthRegex.test(validateRuleArr[i])){
if(!eval(validateRuleArr[i])){break;};
};
// 判断设置了最大长度
if(maxlengthRegex.test(validateRuleArr[i])){
if(!eval(validateRuleArr[i])){break;};
};
};
}
// 验证是否是必填项
function required(){
if(el.value == '' || el.value == null){
console.log("不能为空");
return false;
};
return true;
}
// 最小值验证
function min(num){
if(el.value < num){
console.log('最小值不能小于'+num);
return false;
};
return true;
};
// 最大值验证
function max(num){
if(el.value > num){
console.log('最大值不能大于'+num);
return false;
};
return true;
};
// 最小长度验证
function minlength(length){
if(el.value.length < length){
console.log('最小长度不能小于'+length);
return false;
};
return true;
};
// 最大长度进行验证
function maxlength(length){
if(el.value.length > length){
console.log('最大长度不能大于'+length);
return false;
};
return true;
}
}
}
}
}
</script> <style>
#app{}
.input{padding-bottom:20px;}
.app input{width: 300px; height: 35px; outline:none; background:#ddd;}
.app span{padding-left:20px;}
</style>

vue--自定义验证指令的更多相关文章

  1. vue自定义tap指令

    1.Vue指令 Vue提供自定义实现指令的功能, 和组件类似,可以是全局指令和局部指令,详细可以参见vue官网自定义指令一节(https://cn.vuejs.org/v2/guide/custom- ...

  2. vue自定义拖动指令

    1.在项目开发中,需要对div进行拖动.因为需要自定义组件 a>定义全局拖拽指令: 定义全局指令,需要在main.js中写入vue.directive('drag',{});即可.但是一般会在外 ...

  3. Angular4 后台管理系统搭建(9) - 用自定义angular指令,实现在服务端验证

    最近这段时间发现,北京这用angular4 或 angular2的公司很少.几乎是没有.很担心自己是不是把精力放到了不应该的地方.白耽误了时间.但是随着我对新版angular框架理解的加深.个人感觉a ...

  4. vue 自定义指令input表单的数据验证

    一.代码 <template> <div class="check" > <h3>{{msg}}</h3> <div clas ...

  5. Vue自定义指令使用场景

    当你第一次接触vue的时候,一定会使用到其中的几个指令,比如:v-if.v-for.v-bind...这些都是vue为我们写好的,用起来相当的爽.如果有些场景不满足,需要我们自己去自定义,那要怎么办呢 ...

  6. vue 自定义指令(directive)实例

    一.内置指令 1.v-bind:响应并更新DOM特性:例如:v-bind:href  v-bind:class  v-bind:title  v-bind:bb 2.v-on:用于监听DOM事件: 例 ...

  7. vue自定义指令

    Vue自定义指令: Vue.directive('myDr', function (el, binding) { el.onclick =function(){ binding.value(); } ...

  8. Vue 自定义图片懒加载指令v-lazyload

    Vue是可以自定义指令的,最近学习过程中遇见了一个需要图片懒加载的功能,最后参考了别人的代码和思路自己重新写了一遍.以下将详细介绍如何实现自定义指令v-lazyload. 先看如何使用这个指令: &l ...

  9. vue 自定义指令的使用案例

    参考资料: 1. vue 自定义指令: 2. vue 自定义指令实现 v-loading: v-loading,是 element-ui 组件库中的一个用于数据加载过程中的过渡动画指令,项目中也很少需 ...

  10. vue自定义指令用法总结及案例

    1.vue中的指令有哪些?

随机推荐

  1. [Arch] 02. Design principle and Software Pattern

    Ref: 软件设计的七大原则 有时间的话,还需进一步深入理解. Figure, 重要的前五个原则 单一职责原则 (Simple responsibility pinciple SRP) 类的设计趋向于 ...

  2. Struts2_day02讲义_使用Struts完成对客户的新增操作

  3. CreateThreadpoolIo 函数小记

    函数原型如下: PTP_IO WINAPI CreateThreadpoolIo( _In_ HANDLE fl, _In_ PTP_WIN32_IO_CALLBACK pfnio, _Inout_o ...

  4. error: pathspec 'master' did not match any file(s) known to git.

    问题描述: 在远程服务器上新建裸仓库git  --bare init : git clone裸仓库到本地: 本地新建并切换分支xccdev,git checkout -b xccdev: 从xccde ...

  5. Git 学习笔记--1.Git基础操作

    取得项目的Git仓库 有两种方式取得Git项目仓库.第一种是在现存的目录下,通过导入所有文件来创建新的Git仓库.第二种是从已有的Git仓库克隆出一个新的镜像仓库. 在工作目录中初始化新仓库  要对现 ...

  6. Dictionary的应用

    在C#中,Dictionary提供快速的基于兼职的元素查找.他的结构是这样的:Dictionary<[key], [value]> ,当你有很多元素的时候可以使用它.它包含在System. ...

  7. 【转】VC 隐藏模块、MFC 改变窗口类名

    [转]VC 隐藏模块 void HideDll() { HMODULE hMod = ::GetModuleHandle("MyHook.dll"); PLIST_ENTRY He ...

  8. chattr lsattr

    chattr命令的用法:chattr [ -RVf ] [ -v version ] [ mode ] files…最关键的是在[mode]部分,[mode]部分是由+-=和[ASacDdIijsTt ...

  9. php文件的处理和操作

    好长时间没有看php手册了,有些关于文件操作方面的知识点发现从没有学过,现补习一下,顺便整理一下: 1.文件的打开:fopen()   此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪 ...

  10. 【python3】爬取新浪的栏目分类

    目标地址: http://www.sina.com.cn/ 查看源代码,分析: 1 整个分类 在 div main-nav 里边包含 2 分组情况:1,4一组 . 2,3一组 . 5 一组 .6一组 ...