• vue之directive


    自定义指令
    使用Vue.directive()定义全局的指令v-focus
    参数1 :指令的名称,注意,在定义的时候,名称前面不需要加 v- 前缀,但在调用的时候,必须在指令名称前加上 v- 前缀来进行调用
    参数2: 是一个对象,这个对象身上,有一些指令相关的函数,这些函数可以在特定的阶段,执行相关的操作。
    常用的指令相关函数有bind, inserted, update。
    在每个函数中,第一个参数,永远是 el ,表示被绑定了指令的那个元素,这个 el 参数,是一个原生的JS对象
    bind: 每当指令绑定到元素上的时候,会立即执行这个 bind 函数,只执行一次,样式相关的可以在bind中设置
    inserted: 元素插入到DOM中的时候,会执行 inserted 函数【触发1次】,和JS行为有关的操作,最好在 inserted 中去执行
    updated: 当VNode更新的时候,会执行 updated, 可能会触发多次
    font-weight是一种函数简写 方式
    自定义全局和局部的自定义指令:

        // 自定义全局指令 v-focus,为绑定的元素自动获取焦点:
        Vue.directive('focus', {
          inserted: function (el) { // inserted 表示被绑定元素插入父节点时调用
            el.focus();
          }
        });
    
        // 自定义局部指令 v-color 和 v-font-weight,为绑定的元素设置指定的字体颜色 和 字体粗细:
          directives: {
            color: { // 为元素设置指定的字体颜色
              bind(el, binding) {
                el.style.color = binding.value;
              }
            },
            'font-weight': function (el, binding2) { // 自定义指令的简写形式,等同于定义了 bind 和 update 两个钩子函数
              el.style.fontWeight = binding2.value;
            }
          }
    
    

    自定义指令的使用方式:

    <input type="text" v-model="searchName" v-focus v-color="'red'" v-font-weight="900">
    
    

    钩子函数参数
    钩子函数被赋予了以下参数

    【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.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。
    
    

    【vnode】
      Vue 编译生成的虚拟节点。

    下面是一个使用了这些参数的自定义钩子样例

    <div id="app" v-demo:foo.a.b="message"></div>
    
    
    <script>
    Vue.directive('demo', {
      bind: function (el, binding, vnode) {
        var s = JSON.stringify
        el.innerHTML =
          'name: '       + s(binding.name) + '<br>' +
          'value: '      + s(binding.value) + '<br>' +
          'expression: ' + s(binding.expression) + '<br>' +
          'argument: '   + s(binding.arg) + '<br>' +
          'modifiers: '  + s(binding.modifiers) + '<br>' +
          'vnode keys: ' + Object.keys(vnode).join(', ')
      }
    })
    new Vue({
      el: '#app',
      data: {
        message: 'hello!'
      }
    })
    </script>
    
    
  • 相关阅读:
    Webpack2 那些路径
    Nginx alias 和 root配置
    前端代码监控
    Class和构造函数的异同
    Async和await
    如何在git中删除指定的文件和目录
    微信小程序数字转化条形码和二维码
    vue 结合swiper插件实现广告公告上下滚动的效果
    vue2.0 结合better-scroll 实现下拉加载
    FormData对象提交表单和form提交表单
  • 原文地址:https://www.cnblogs.com/luckyjiu9/p/13687847.html
Copyright © 2020-2023  润新知