Vue.js directive自定义指令详解
作者:猫老板的豆 发布时间:2024-05-28 15:46:18
标签:vue.js,directive,指令
自定义一个demo指令
Vue自定义指令语法如下:
Vue.directive(id, definition)
传入的两个参数,id是指指令ID,definition是指定义对象。其中,定义对象可以提供一些钩子函数。
<div id="app">
<!-- input输入框获得焦点 -->
<input type="text" v-focus/>
</div>
<script>
// 注册一个全局自定义指令 v-focus
Vue.directive("focus", {
// 当绑定元素插入到 DOM 中。
inserted(el, binding) {
// 聚焦元素
el.focus();
}
})
</script>
<div id="app">
<p v-demo:red="msg">{{msg}}</p>
</div>
<script>
// 全局指令
Vue.directive('demo', function (el, binding) {
console.log(el) //p标签
console.log(binding) //输出的是一个对象obj
console.log('指令名:'+binding.name)//指令名
console.log('指令的绑定值:'+binding.value)//指令的绑定值
console.log('绑定值的字符串形式:'+binding.expression) //绑定值的字符串形式
console.log('传给指令的参数:'+binding.arg)//传给指令的参数
})
var vm = new Vue({
el: "#app",
data: {
msg: 'hello!'
},
// 局部指令
directives:{
demo:{
inserted: function (el) {
console.log(el)
}
}
}
})
</script>
对象字面量
<div id="app">
<p v-demo="colours">{{colours.text}}</p>
</div>
<script>
Vue.directive('demo', function (el, binding) {
console.log(el) // p标签
console.log(binding) // 输出的是一个对象obj
console.log(binding.value) // {color: 'blue',text: 'hello!'}
console.log(binding.value.color) // 'blue'
console.log(binding.value.text) // 'hello!'
el.style = 'color:' + binding.value.color
})
var vm = new Vue({
el: "#app",
data: {
colours: {
color: 'blue',
text: 'hello!'
}
}
})
</script>
生命周期钩子
指令定义函数提供了几个钩子函数(可选):
bind
:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作。inserted
:被绑定元素插入父节点(div#app
)时调用(父节点存在即可调用,不必存在于document中)。update
:当绑定指令的元素(VNode-虚拟节点)状态发生改变时触发(包括样式、内容、vue数据…)componentUpdated
:指令所在的组件的VNode以及其子VNode 全部更新后调用。unbind
:只调用一次,指令与元素解绑(元素从DOM中删除)时调用。
<div id="app">
<p v-demo="color">{{num}}</p>
<button @click="add">增加</button>
<button onclick='unbind()'>解绑</button>
</div>
<script>
function unbind() {
vm.$destroy(); //另外起一个方法解绑
}
Vue.directive('demo', { //五个注册指令的钩子函数
bind: function () { //1.被绑定
//做绑定的准备工作。比如添加事件 * ,或是其他只需要执行一次的复杂操作
console.log('1 - bind');
},
inserted: function () { //2.绑定到节点
console.log('2 - inserted');
},
update: function () { //3.组件更新
//根据获得的新值执行对应的更新。对于初始值也会调用一次
console.log('3 - update');
},
componentUpdated: function () { //4.组件更新完成
console.log('4 - componentUpdated');
},
unbind: function () { //5.解绑
//做清理操作。比如移除bind时绑定的事件 *
console.log('5 - bind');
}
})
var vm = new Vue({
el: "#app",
data: {
num: 10,
color: 'red'
},
methods: {
add: function () {
this.num++;
}
}
})
</script>
初始化触发方法1和2,点击增加按钮触发方法3和4,点击解绑按钮触发方法5,如下图:
到此这篇关于Vue.js directive自定义指令详解的文章就介绍到这了,更多相关Vue.js directive自定义指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持asp之家!
来源:https://blog.csdn.net/x550392236/article/details/78583082
0
投稿
猜你喜欢
- 本文实例为大家分享了python实现维吉尼亚算法的具体代码,供大家参考,具体内容如下1 Virginia加密算法、解密算法Vigenenre
- 概念第一步:计算一个梯度 Ix,Iy第二步:整合矩阵,计算特征值第三步:比较特征值的大小第四步: 非极大值抑制,把真正的角点留下来,角点周围
- 程序开始一、基本使用1、创建一个游戏窗口出来代码如下:# coding:utf8import pygameimport sys# 初始化py
- 这篇文章主要介绍了python matplotlib饼状图参数及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 字典的创建名称={”键名“:”键值“}举例:person={
- 题目描述1046. 最后一块石头的重量 - 力扣(LeetCode)有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石
- 格式化字符串是什么?Python字符串的格式化处理主要是用来将变量(对象)的值填充到字符串中,在字符串中解析Python表达式,对字符串进行
- 本博客详细为你解释 Python Flask 框架下的 HTML 文件压缩内容,其第三方模块也可用在其他框架中。本案例是基于 Python
- 本文实例为大家分享了SpringBoot整合Mybatis使用Druid数据库连接池的方法,具体内容如下在SpringBoot项目中,增加如
- Matplotlib可以无缝的处理LaTex字体,在图中加入数学公式from matplotlib.patches import Polyg
- 1. 使用os.system("cmd")特点是执行的时候程序会打出cmd在Linux上执行的信息。import oso
- ASP结合ADO对数据库方便快捷的访问、结合XML、COM/ActiveX等其它技术 实现服务器多层结构的功能使它在今天还有着顽强的生命力。
- groupcache 简介在软件系统中使用缓存,可以降低系统响应时间,提高用户体验,降低某些系统模块的压力.groupcache是一款开源的
- 1、选择排序选择排序是一种简单直观的排序算法。它的原理是这样:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余
- python 2.6编写,自己瞎写的,备用''' Export and Import ElasticSe
- 1.前言pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echar
- 一、 使用Springboot+Jpa实现对mysql数据库的增删改查和分页功能JPA是Java Persistence API的简称,中文
- 一、变量的定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end 块中使用,变量必须定义在
- 本文实例讲述了python中@property和property函数常见使用方法。分享给大家供大家参考,具体如下:1、基本的@propert
- 目录property属性property属性的定义和调用要注意一下几点:具体实例property属性的有两种方式装饰器方式旧式类新式类注意类