vue自定义指令


<body>
    <div id="root">
        <h2>{{name}}</h2>
        <h2>当前的n值是: <span v-text="n"></span></h2>
        <h2>放大10倍后的n值是: <span v-big="n"></span></h2>
        <button @click="n++">点我n+1</button>
    </div>
    <script>
        Vue.config.productionTip = false;
        new Vue({
            el:'#root',
            data:{
                name: '张三',
                n: 1
            },
            directives:{
                big(element,binding){
                    element.innerText = binding.value * 10
                }
            }
        })
    </script>
<body>

分为全局和局部 局部就是上面的

自定义指令_对象式 


语法:new Vue({  directives:{指令名:配置对象}  }) 

那什么时候会用到对象式自定义指令呢?

例如,你想要在一开始就获取表单的焦点,那只写 fbind(element,binding){element.focus() } 是没有效果的,因为这个指令与元素成功绑定时,会执行一次,此时 input 表单还没在页面上显示,就已经调用了 input.focus 是没用的. 类似于当你动态的创建一个元素时,你还没把元素放到页面上就开始访问它的父元素了,这时候是访问不到的

所以,解决这个的办法就是用对象式创建自定义指令,对象会把每个阶段分的比较细,大致分为三类,如下:

directives:{
                fbind:{
                    //指令与元素成功绑定时(一上来)
                    bind(element,binding){
                        element.value = binding.value
                    },
                    //指令所在元素被插入页面时
                    inserted(element,binding){
                        element.focus()
                    },
                    //指令所在的模板被重新解析时
                    update(element,binding){
                        element.value = binding.value
                    }
 
                }
            }

自定义指令的钩子

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

上一篇:WPF 基础 - Binding 的源与路径


下一篇:ES10toString()方法修订和Catch Binding