自定义指令 VUE基础回顾7
vue除了有v-if等内置指令,我们也可以创建自定义指令。
例:我们可以实现一个可以每隔一秒闪烁的节点,类似于<blink>标签的行为。添加一个指令类似于添加一个过滤器,可以将他传入vue实例或组件的directives属性,或者使用vue.directive()注册一个全局指令。传入指令的名字以及包含钩子函数的对象,这些钩子函数会在设置了该指令的元素的生命周期的各个阶段运行。
<div v-blink>闪烁的盒子</div>
5个钩子函数
bind:会在指令绑定到元素时被调用。
inserted:在被绑定的元素被添加到父节点时被调用。和mounted一样,并不能保证元素被添加DOM上。可以使用this.$nextTick保证
update: 节点被更新时调用,但是该组件的子组件可能还没有更新
componentUpdated: 更新完成后调用
unbind: 用于指令拆除,指令被解绑调用。
以上钩子函数不必每次都调用所有钩子,他们是可选的。bind和update钩子常用,如果想同时调用,可以传入一个函数作为参数,这个函数会分别被这两个
Vue.directive('test',(el)=>{
//代码会被 bind update 两个钩子调用
})
钩子函数参数
在前面已经回顾了指令可以接收参数,修饰符和值。可以传入钩子函数的第二个参数---binding---来访问这些所有内容,binding对象会包含以下属性
例:v-my:example.one.two="test"
name: 属性指令的名称,不包含v-。所以name的值为my
value: 传入指令的值。在这个例子中它将是test表达式的计算值。{test:hello world},那么value值就是hello word
oldValue: 属性上次传入得值,它只有子在update和componentUpdated中使用,如果改变test得值update被调用,此时得value得值是新的
expression: 指令表达式的字符串形式,之后会对该表达式求值。在这个例子中它的值为test
arg:传入指令的参数 也就是example
modifiers: 属性是一个包含所有传入指令的修饰符对象 也就是 one tow。
Vue.directive('blink',{
bind(el,binding){
let isVisible = true
setInterval(()=>{
isVisible = !isVisible;
el.style.visibility = isVisible ? 'visible' : 'hidden';
},binding.value || )
}
})
上面的代码中添加了binding参数,并设置了计时时间。但是例子缺少了用于处理该指令值变化后更新组件的逻辑。要实现这一点需要将setInterval返回的ID存到元素的data属性上,然后再update钩子函数中清除旧定时器,之后再创建一个新的定时器。
自定义指令 VUE基础回顾7的更多相关文章
- vue中自定义指令vue.direvtive,自定义过滤器vue.filter(),vue过渡transition
自定义指令 默认设置的核心指令( v-model,v-bind,v-for,v-if,v-on等 ),Vue 也允许注册自定义指令.注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件——然而 ...
- 自定义指令directive基础用法
官方链接:http://doc.vue-js.com/v2/guide/custom-directive.html#simplest-directive-example 在main.js中注册自定义指 ...
- 一、VUE基础回顾1
1.v-if和v-show v-if 和v-show都可以显示和隐藏元素: 区别:(1)v-if初始值为false那么这个元素不会被渲染 ,v-show不管初始值为何值都会被渲染 (2)v-if是控制 ...
- VUE基础回顾2
1.响应式 vue修改了每个添加到data上的对象,当该对象发生变化时vue会收到通知,从而实现响应式.对象的每个属性都会被替换为getter,setter方法. 有两种方式实现data对象的监听 ( ...
- VUE基础回顾6
1.ref ref可以直接访问元素,而不需要使用querySelector或者其他dom节点的原生方法. <div ref = "box"></div> 在 ...
- 动画 VUE基础回顾8
过渡和动画 使用<transition> 组件包裹 例: <transition name="fade"> <div v-if="true& ...
- vue基础回顾 router
vue-router 1. 底层原理 hash 或者h5 histroy(有兼容性) 2. 使用的时候Vue需要引入VueRouter Vue.use(VueRouter) //VueRouter 底 ...
- vue 基础-->进阶 教程(2): 指令、自定义指令、组件
第二章 建议学习时间4小时 课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...
- Vue基础进阶 之 自定义指令
自定义指令-----钩子函数 自定义指令 除了内置指令,Vue也允许用户自定义指令: 注册指令:通过全局API Vue.directive可以注册自定义指令: 自定义指令的钩子函数: bind: in ...
随机推荐
- MyBatis(八):Mybatis Java API枚举类型转化的用法
最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...
- MySQL索引原理(三)
多个单列索引和联合索引的区别详解 背景:为了提高数据库效率,建索引是家常便饭:那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里 ...
- java.lang.Exception: No tests found matching
java.lang.Exception: No tests found matching 需要导入junit.jar 和 hamcrest.jar
- aardio类的例子
论坛里面相关资料太少,这里贴一下 库需要在工程的lib目录下,在ide里面就是用户库目录,比如 my_lib namespace my_lib{ import console class MyLibC ...
- 使用 Laravel-Swagger 编写接口文档(php)
使用 Laravel-Swagger 编写接口文档 Table of Contents Swagger 文档管理 官方网站:https://swagger.io/ 快速编写你的 RESTFUL API ...
- [转]TrueType(TTF)字体文件裁剪(支持简体中文,繁体中文TTF字体裁剪)
原文入口: TTF字体文件裁剪(支持简体中文,繁体中文TTF字体裁剪) 对于TrueType(TTF)字体格式的介绍可以看: https://www.cnblogs.com/slysky/p/1131 ...
- 【转】Redis哨兵(Sentinel)模式
主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用.这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式. 一.哨兵 ...
- linux编译Qt+mysql驱动+可执行文件移植目标机
前言: 如果希望自己的Qt/C++程序在目标机上运行,最简单的方法就是在目标机上安装一个Qtcreater[Qtxxx.run],然后编译release的可执行文件,直接拉起即可. 但是有些环境情况比 ...
- k8s记录-kubeam方式部署k8s
参考:https://blog.csdn.net/networken/article/details/84991940 # k8s工具部署方案 # 1.集群规划 | **服务器** | || ---- ...
- 自动生成LR脚本且运行
背景:作为一个测试,特别是性能测试,尤其在活动的测试,时间紧,有很多要测的,我们的LR11因为浏览器兼容问题全录制不了脚本了,用浏览器加代理或手机加代理录制,我感觉好麻烦 ,所以就想如果能用脚本把所有 ...