zoukankan      html  css  js  c++  java
  • vue2.0 自定义指令详解

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script src="vue2.2.js"></script>
        </head>
        <body>
            <div id="app">
                <div v-lang="color">{{num}}</div>
                <p><button @click="add">add</button></p>
            </div>
        </body>
        <script type="text/javascript">
        Vue.directive('lang',function(el,binding){
            console.log(el)//标签<div v-lang="color">{{num}}</div>
            console.log(binding)//输出的是一个对象obj
            el.style='color:'+binding.value//binding.value就是color颜色red。
        })
            var vm = new Vue({
                el:"#app",
                data:{
                    num:10,
                    color:'red'
                },
                methods:{
                    add:function(){
                        this.num++;
                    }
                }
            })
        </script>
    </html>

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

    binding: 一个对象,包含指令的很多信息。

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

    利用钩子函数:

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script src="vue2.2.js"></script>
        </head>
    
        <body>
            <div id="app">
                <div v-lang="color">{{num}}</div>
                <p><button @click="add">add</button></p>
            </div>
            <p>
                <button onclick='unbind()'>解绑</button>
            </p>
        </body>
        <script type="text/javascript">
            function unbind() {
                vm.$destroy();//另外起一个方法解绑
            }
            Vue.directive('lang', { //五个注册指令的钩子函数
                bind: function() { //被绑定
                    console.log('1 - bind');
                },
                inserted: function() { //绑定到节点
                    console.log('2 - inserted');
                },
                update: function() { //组件更新
                    console.log('3 - update');
                },
                componentUpdated: function() { //组件更新完成
                    console.log('4 - componentUpdated');
                },
                unbind: function() { //解绑
                    console.log('5 - bind');
                }
            })
            var vm = new Vue({
                el: "#app",
                data: {
                    num: 10,
                    color: 'red'
                },
                methods: {
                    add: function() {
                        this.num++;
                    }
                }
            })
        </script>
    
    </html>

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

     

  • 相关阅读:
    Spark实战练习03--Pair RDD
    Spark实战练习02--处理分隔符
    Spark实战练习01--XML数据处理
    做一个”合格“的程序员(二)——学习管理
    做一个“合格”的程序员(一)——基础能力
    图像处理算法之帧间差分法
    图像几何变换之透视变换
    图像几何变换之仿射变换
    内部排序之简单选择排序
    非极大值抑制算法
  • 原文地址:https://www.cnblogs.com/lhl66/p/7492444.html
Copyright © 2011-2022 走看看