除了默认设置的核心指令( v-model 和 v-show ),Vue 也允许注册自定义指令。注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件——然而,有的情况下,你仍然需要对纯 DOM 元素进行底层操作,这时候就会用到自定义指令。

官方建议directive是对纯 DOM 元素进行底层操作使用,一般情况下还是建议使用组件的复用。
directive的意义
自定义指令是用来操作DOM的。
尽管数据驱动是Vue的核心之一,但是在实际情况下,并不是所有的情况都可以用数据来驱动视图,我们不可避免的会在有些情况下有操作DOM的需求,所以directive也就出现了。自定义指令就是一种有效的补充和扩展,不仅可用于定义任何的DOM操作,并且是可复用的。
官方栗子
code
// 注册一个全局自定义指令 v-focus
Vue.directive('focus', {
// 当绑定元素插入到 DOM 中。
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
//局部指令
directive: {
focus(el){
el.focus()
}
}
use
<input v-focus> //input标签自动获得标签
是不是感觉很简单?相信自己,其实vue大法真心不难,难得是如何应用。下面先来简单看看的钩子函数。
钩子函数
钩子参数
实际应用
directive的语法就这么简单,在合适的钩子中做应该做的事就可以了。下面会列出两个使用指令的栗子
集成第三方插件
用了一段时间的vue,其实我都没有留意directive具体使用,一般来言真的很少使用到。直到有一次需要集成第三方插件到Vue时才发现,原来directive是集成第三方插件最合适也是最简单的方式。凡是关于第三方的集成,都可以尝试使用directive
import Vue from 'vue'
import hljs from 'highlight.js'
import 'highlight.js/styles/monokai-sublime.css'
Vue.directive('highlight', {
bind(el){
hljs.highlightBlock(el);
},
})
use
<pre> <code v-highlight> //code here </code> </pre>
如上,我注册了一个全局的指令 highlight。 指令的作用就是高亮代码,当元素带上'v-highlight'时,hljs就会去初始化该Dom。
当然我这是可以使用组件来实现这个功能,但绝对没有指令那么方便快捷,下面是一个简略的组件,可以看出,不仅定义和使用都比指令来的复杂。
<template>
<pre>
<code ref="code">
<slot name="code"></slot>
</code>
</pre>
</template>
<script>
import hljs from 'highlight.js'
import 'highlight.js/styles/monokai-sublime.css'
export default {
mounted(){
hljs.highlightBlock(this.$refs.code);
}
}
</script>
指令验证
如果需要一个可以复用的验证,我们也可以使指令来完成,下面来看一个简单的栗子:
Vue.directive('checkName', {
//监控数据变化
update(el, binding){
let regex = /^[a-zA-z]{6,10}$/g;
//=value === oldValue, 避免重复更新
if(binding.value !== binding.oldValue){
el.style.border = regex.test(binding.value) ? '' : '1px solid red';
}
}
})
user
<input v-model='value1' v-checkName='value1'></input> <input v-model='value2' v-checkName='value2'></input> <input v-model='value3' v-checkName='value3'></input> <input v-model='value4' v-checkName='value4'></input> //当value的值不是6-10的字母的时,input的boder变为红色;
result
结果很明显,不符合规则的数据,input的边框变红了。
End
这里只是抄写下官方的文档,举两个栗子,就是那么简单,任性 ( ̄~ ̄) !其实主要想说明白的一件事就是明确dirctive的意义:指令是用来操作DOM的,希望能起到抛砖引玉的作用吧。
参考
VUE-自定义指令
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Vue2
# directive
# Vue
# 对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
# 在Vue2中注册全局组件的两种方法详解
# vue2实现directive自定义指令的封装与全局注册流程
# 自定义
# 绑定
# 第三方
# 复用
# 情况下
# 是一个
# 这是
# 定值
# 就会
# 也就
# 我都
# 修饰符
# 是用来
# 可以用
# 会在
# 真的很
# 抛砖引玉
# 用了
# 希望能
# 很简单
相关文章:
建站之星如何开启自定义404页面避免用户流失?
如何在西部数码注册域名并快速搭建网站?
定制建站是什么?如何实现个性化需求?
ui设计制作网站有哪些,手机UI设计网址吗?
如何快速上传建站程序避免常见错误?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何在建站之星绑定自定义域名?
山东网站制作公司有哪些,山东大源集团官网?
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何零基础开发自助建站系统?完整教程解析
网站网页制作专业公司,怎样制作自己的网页?
如何在搬瓦工VPS快速搭建网站?
常州企业网站制作公司,全国继续教育网怎么登录?
如何在万网自助建站平台快速创建网站?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
网站制作公司排行榜,四大门户网站排名?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何确保FTP站点访问权限与数据传输安全?
建站之星如何实现PC+手机+微信网站五合一建站?
C++如何编写函数模板?(泛型编程入门)
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
如何在宝塔面板中修改默认建站目录?
高防服务器如何保障网站安全无虞?
制作农业网站的软件,比较好的农业网站推荐一下?
清除minerd进程的简单方法
如何安全更换建站之星模板并保留数据?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
制作公司内部网站有哪些,内网如何建网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
购物网站制作公司有哪些,哪个购物网站比较好?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
Swift中switch语句区间和元组模式匹配
广德云建站网站建设方案与建站流程优化指南
如何在IIS中新建站点并解决端口绑定冲突?
简单实现Android文件上传
企业微网站怎么做,公司网站和公众号有什么区别?
定制建站流程解析:需求评估与SEO优化功能开发指南
威客平台建站流程解析:高效搭建教程与设计优化方案
5种Android数据存储方式汇总
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
如何通过商城免费建站系统源码自定义网站主题?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
寿县云建站:智能SEO优化与多行业模板快速上线指南
,柠檬视频怎样兑换vip?
平台云上自助建站如何快速打造专业网站?
开心动漫网站制作软件下载,十分开心动画为何停播?
制作网站怎么制作,*游戏网站怎么搭建?
Python如何创建带属性的XML节点
*请认真填写需求信息,我们会在24小时内与您取得联系。