vue除了有v-if等内置指令,我们也可以创建自定义指令。

  例:我们可以实现一个可以每隔一秒闪烁的节点,类似于<blink>标签的行为。添加一个指令类似于添加一个过滤器,可以将他传入vue实例或组件的directives属性,或者使用vue.directive()注册一个全局指令。传入指令的名字以及包含钩子函数的对象,这些钩子函数会在设置了该指令的元素的生命周期的各个阶段运行。

<div v-blink>闪烁的盒子</div>
  Vue.directive('blink',{
        bind(el){
          let isVisible = true
          setInterval(()=>{
            isVisible = !isVisible;
            el.style.visibility = isVisible ? 'visible' : 'hidden';
          },1000)
        }
      })

  

  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的更多相关文章

  1. vue中自定义指令vue.direvtive,自定义过滤器vue.filter(),vue过渡transition

    自定义指令 默认设置的核心指令( v-model,v-bind,v-for,v-if,v-on等 ),Vue 也允许注册自定义指令.注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件——然而 ...

  2. 自定义指令directive基础用法

    官方链接:http://doc.vue-js.com/v2/guide/custom-directive.html#simplest-directive-example 在main.js中注册自定义指 ...

  3. 一、VUE基础回顾1

    1.v-if和v-show v-if 和v-show都可以显示和隐藏元素: 区别:(1)v-if初始值为false那么这个元素不会被渲染 ,v-show不管初始值为何值都会被渲染 (2)v-if是控制 ...

  4. VUE基础回顾2

    1.响应式 vue修改了每个添加到data上的对象,当该对象发生变化时vue会收到通知,从而实现响应式.对象的每个属性都会被替换为getter,setter方法. 有两种方式实现data对象的监听 ( ...

  5. VUE基础回顾6

    1.ref ref可以直接访问元素,而不需要使用querySelector或者其他dom节点的原生方法. <div ref = "box"></div> 在 ...

  6. 动画 VUE基础回顾8

    过渡和动画 使用<transition> 组件包裹 例: <transition name="fade"> <div v-if="true& ...

  7. vue基础回顾 router

    vue-router 1. 底层原理 hash 或者h5 histroy(有兼容性) 2. 使用的时候Vue需要引入VueRouter Vue.use(VueRouter) //VueRouter 底 ...

  8. vue 基础-->进阶 教程(2): 指令、自定义指令、组件

    第二章 建议学习时间4小时  课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...

  9. Vue基础进阶 之 自定义指令

    自定义指令-----钩子函数 自定义指令 除了内置指令,Vue也允许用户自定义指令: 注册指令:通过全局API Vue.directive可以注册自定义指令: 自定义指令的钩子函数: bind: in ...

随机推荐

  1. unix udp sendto 最大可发送的数据长度

    sendto 的最大可发送数据长度受限于两个值. 第一 [2^16 -1 - 8 -20] 第二 [SO_SNDBUF] 解释受限于[2^16-1-8-20] 数据封装过程 第一步: 用户层 : us ...

  2. Keras split train test set when using ImageDataGenerator

    Keras split train test set when using ImageDataGenerator I have a single directory which contains su ...

  3. Un-Error-ASP.NET:无法加载协定为“YlbService.MMSHServicesSoap”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。

    ylbtech-Error-ASP.NET:无法加载协定为“YlbService.MMSHServicesSoap”的终结点配置部分,因为找到了该协定的多个终结点配置.请按名称指示首选的终结点配置部分 ...

  4. 【转载】 TensorFlow tf.app&tf.app.flags用法介绍

    作 者:marsggbo 出 处:https://www.cnblogs.com/marsggbo版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本. ---------- ...

  5. Flutter中极光推送的使用----jpush_flutter

    原文地址:https://www.cnblogs.com/niceyoo/p/11095994.html 1.申请极光账号和建立应用 极光推送的官方网址为:https://www.jiguang.cn ...

  6. Look Further to Recognize Better: Learning Shared Topics and Category-Specific Dictionaries for Open-Ended 3D Object Recognition

    张宁 Look Further to Recognize Better: Learning Shared Topics and Category-Specific Dictionaries for O ...

  7. Executors创建四种线程池

    newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixedThreadPool 创建一个定长线程池,可控制线程 ...

  8. php nl2br 将\n变成<br />

    <?php $str="h t m l"; //定义一个多处换行的字串 echo "未处理前的输出形式:<br />{$str}"; #nl2 ...

  9. PMP 第4章错题总结

    变更步骤: 1.配置管理活动:配置识别.配置状态记录.配置核实与审计2.项目章程中记录项目的目的和总体预算3.变更控制系统规定了变更管理流程及批准的权限4.项目章程是授权项目经理动用组织资源的文件5. ...

  10. OpenShift 4.2 离线安装补充记录

    OpenShift4.2详细安装参考同事王征的安装手册(感谢王征大师的研究和答疑解惑, 大坑文章都已经搞定了,我这里是一些小坑) https://github.com/wangzheng422/doc ...