详解Vue2.x-directive的学习笔记
发布时间 - 2026-01-11 02:22:57 点击率:次除了默认设置的核心指令( 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大法真心不难,难得是如何应用。下面先来简单看看的钩子函数。
钩子函数
- bind:在该元素绑定指令时调用且仅调用一次,用于初始化
- inserted:元素插入父节点时调用(可能仍在虚拟Dom中)
- update:模板更新时调用
- componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
- unbind: 只调用一次, 指令与元素解绑时调用。
钩子参数
- el: 指令所绑定的元素,可以用来直接操作 DOM 。
- binding: 一个对象,包含以下属性:
- name: 指令名,不包括 v- 前缀。
- value: 指令的绑定值
- oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
- expression: 绑定值的字符串形式。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"。
- arg: 传给指令的参数。例如 v-my-directive:foo, arg 的值是 "foo"。
- modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。
- vnode: Vue 编译生成的虚拟节点。
- oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。
实际应用
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自定义指令的封装与全局注册流程
# 自定义
# 绑定
# 第三方
# 复用
# 情况下
# 是一个
# 这是
# 定值
# 就会
# 也就
# 我都
# 修饰符
# 是用来
# 可以用
# 会在
# 真的很
# 抛砖引玉
# 用了
# 希望能
# 很简单
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Java解压缩zip - 解压缩多个文件或文件夹实例
音乐网站服务器如何优化API响应速度?
制作旅游网站html,怎样注册旅游网站?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
韩国服务器如何优化跨境访问实现高效连接?
长沙企业网站制作哪家好,长沙水业集团官方网站?
Firefox Developer Edition开发者版本入口
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何生成腾讯云建站专用兑换码?
如何在七牛云存储上搭建网站并设置自定义域名?
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
网站制作价目表怎么做,珍爱网婚介费用多少?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
简历没回改:利用AI润色让你的文字更专业
如何在阿里云通过域名搭建网站?
重庆市网站制作公司,重庆招聘网站哪个好?
Laravel如何使用Livewire构建动态组件?(入门代码)
大连 网站制作,大连天途有线官网?
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
Laravel定时任务怎么设置_Laravel Crontab调度器配置
如何在服务器上配置二级域名建站?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
个人摄影网站制作流程,摄影爱好者都去什么网站?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
七夕网站制作视频,七夕大促活动怎么报名?
如何在橙子建站上传落地页?操作指南详解
QQ浏览器网页版登录入口 个人中心在线进入
jQuery validate插件功能与用法详解
创业网站制作流程,创业网站可靠吗?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
海南网站制作公司有哪些,海口网是哪家的?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
Linux系统命令中tree命令详解
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
香港服务器WordPress建站指南:SEO优化与高效部署策略

