• Vue:自定义指令


    在Vue中有很多指令,以v-开头的命令作用在HTML元素上,将指令绑定在元素上,给绑定的元素添加一些特殊行为。

    <span v-if="yes">yes的时候显示出来</span>  

    但有一些是没有相对应的指令进行操作。在这里以progress(h5的新标签进度条)为例,向大家介绍Vue的一个用于指令扩展的方法:directive(自定义指令)。

    语法如下:

    Vue.directive(id, definition)
    

    传入的两个参数,id是指指令ID,definition是指定义对象。其中,定义对象可以提供一些钩子函数。

    钩子函数

    钩子函数   描述
    bind       只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。  
    inserted      被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)
    update 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新
    componentUpdated 被绑定元素所在模板完成一次更新周期时调用
    unbind 只调用一次,指令与元素解绑时使用

    接下来我们来看一下钩子函数的参数 (即 elbindingvnode 和 oldVnode)。

    指令钩子函数会被传入以下参数:

    • el:指令所绑定的元素,可以用来直接操作 DOM 。
    • binding:一个对象,包含以下属性:
      • name:指令名,不包括 v- 前缀。
      • value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。
      • oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
      • expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"。
      • arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"。
      • modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。
    • vnode:Vue 编译生成的虚拟节点。移步 VNode API 来了解更多详情。
    • oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

    使用例子

    <progress value="30" max="40">

    progress中存在value和max两个属性,当我们要动态获取数据,并赋值给其对应属性,发现并不存在这样的属性。这样我们就只能用自定义指令。

    然后我们在HTML中调用自己定义的命令,以v-开头引入。

    在很多时候,你可能想在 bind 和 update 时触发相同行为,而不关心其它的钩子。比如这样写:

    Vue.directive("max",function(el,bind){
      el.max=bind.value.max; }) Vue.directive("val",function(el,bind){ el.value=bind.value.max-bind.value.value;
    })

    官方文档

  • 相关阅读:
    Lilo的实现
    通过Bochs分析Lilo启动Linux内核的过程
    Linux内核代码布局
    Linux启动过程的内核代码分析
    Linux启动过程的C语言代码分析
    Linux操作系统中对于NTFS读取目录功能的实现
    Linux初始化的汇编代码
    Linux文件映射的反思
    Xen的概况
    安装debian总结以及编译linux内核
  • 原文地址:https://www.cnblogs.com/WQLong/p/8068119.html
Copyright © 2020-2023  润新知