• 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;
    })

    官方文档

  • 相关阅读:
    Flash特效 嘿嘿
    惨,被骗了20年
    “不允许对64位应用程序进行修改”的解决方法 “Changes to 64bit applications are not allowed.”
    清除Sql Server数据库日志
    .Net 序列化(去除默认命名空间,添加编码)
    【Vegas原创】X connection to localhost:11.0 broken (explicit kill or server shutdown)解决方法
    【Vegas原创】通过WMIC命令远程打开远程计算机的远程桌面(Remote Desktop)功能
    【Vegas原创】ORA12638: 身份证明检索失败的解决办法
    【Vegas原创】SQL Server 阻止了对组件 'SQL Mail XPs' 的 过程'sys.xp_sendmail' 的访问的解决方法
    【Vegas原创】获取SQL Server处理语句的时间(毫秒)
  • 原文地址:https://www.cnblogs.com/WQLong/p/8068119.html
Copyright © 2020-2023  润新知