zoukankan      html  css  js  c++  java
  • Vue中的自定义指令

    自定义指令介绍 directives - 对普通 DOM 元素进行底层操作

    (1) 自定义指令注册

    当页面加载时,该元素将获得焦点 (注意:autofocus 在移动版 Safari 上不工作)。事实上,只要你在打开这个页面后还没点击过任何内容,这个输入框就应当还是处于聚焦状态。现在让我们用指令来实现这个功能:

    // 注册一个全局自定义指令 `v-focus`
    Vue.directive('focus', {
      // 当被绑定的元素插入到 DOM 中时……
      inserted: function (el) {
        // 聚焦元素
        el.focus()
      }
    })
    

    如果想注册局部指令,组件中也接受一个 directives 的选项:

    directives: {
      focus: {
        // 指令的定义
        inserted: function (el) {
          el.focus()
        }
      }
    }
    

    然后你可以在模板中任何元素上使用新的 v-focus 属性,如下:

    <input v-focus>
    

    (2) 自定义指令钩子

    * bind,inserted,update,componentUpdated,unbind

    * 参数 el,binding,vnode,oldvnode

    指令定义函数提供了几个钩子函数(可选):

    **bind:**只调用一次,指令第一次绑定到元素时调用。用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。

    **inserted:**被绑定元素插入父节点时调用(父节点存在即可调用)。

    **update:**所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新

    **componentUpdated:**指令所在组件的 VNode 及其子 VNode 全部更新后调用。

    **unbind:**只调用一次, 指令与元素解绑时调用。

    钩子函数的参数:(el, binding, vnode, oldVnode)

    ​ el:指令所绑定的元素,可以用来直接操作 DOM 。

    binding:一个对象,包含以下属性

    name:指令名,不包含v-的前缀;

    value:指令的绑定值;例如:v-my-directive=“1+1”,value的值是2;

    oldValue:指令绑定的前一个值,仅在update和componentUpdated钩子函数中可用,无论值是否改变都可用;

    expression:绑定值的字符串形式;例如:v-my-directive=“1+1”,expression的值是’1+1’;

    arg:传给指令的参数;例如:v-my-directive:foo,arg的值为 ‘foo’;

    modifiers:一个包含修饰符的对象;例如:v-my-directive.a.b,modifiers的值为{‘a’:true,‘b’:true}

    vnode:Vue编译的生成虚拟节点;

    oldVnode:上一次的虚拟节点,仅在update和componentUpdated钩子函数中可用。

  • 相关阅读:
    实验:缓冲区溢出
    树莓派4B安装和使用openEuler系统
    stat命令的实现-mysate
    20191310Lee_Yellow第五章读书笔记
    反汇编测试
    openssl编程
    Openeuler安装完整man手册
    20191310Lee_yellow缓冲区溢出实验
    《奔跑吧!树莓派》实验指导第三章
    20191310李烨龙第四章读书笔记
  • 原文地址:https://www.cnblogs.com/Mine-/p/14098624.html
Copyright © 2011-2022 走看看