Vue——自定义全局指令和私有指令

<body>
        <!-- 
            目前已经学过的的vue指令:
            1.插值表达式 {{message}}
            2.v-if = 'flag'指令将根据表达式 flag(true或flase) 的值的真假来插入/移除 <p> 元素。
            3.v-show
            4.v-bind 缩写 : ul 为百度网址   <pre><a v-bind:href="url">点击前往百度</a></pre> 实例:v-bind 指令将该元素的 href 属性与表达式 url 的值绑定
            5.v-on 缩写 @ 它用于监听 DOM 事件
            6.v-model 指令来实现双向数据绑定
         -->
    <script src='./libs/vue.js'></script>
    <div id='app'>
       <input type="text" id="text" v-focus v-color="mycolor">
    </div>
    <script>
        // 在vue中自定义指令,分为两种,1.全局指令,2.私有指令
        // 自定义指令,在定义时不需要加v-前缀,但是在绑定时,必须加上v-前缀
        // 1.全局指令,
        Vue.directive("focus",{
            // 指令定义对象可以提供如下几个钩子函数 (均为可选)
            // bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
            // inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)
            // update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有
            // componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
            // unbind:只调用一次,指令与元素解绑时调用。
            inserted:function(el){
                // el是一个形参,el代表的是你这条指令所绑定的那个DOM元素,原生的DOM对象

                el.focus();
            }
        });

        // 指令简写
        // Vue.directive("focus",function(el){
        // 如果只想在bind和update上注册指令,那么就可以使用这种简写的方式
        //     el.focus();
        // })

        Vue.directive("color",{
            // 指令钩子函数会被传入以下参数:
            // el:指令所绑定的元素,可以用来直接操作 DOM。
            // binding:一个对象,包含以下 property:
            // name:指令名,不包括 v- 前缀。
            // value:指令的绑定值,
            // expression 字符串形式的指令表达式。
            bind:function(el,binding){

                el.style.color = binding.value;
                console.log(binding.name)
                console.log(binding.value) 
                console.log(binding.expression)
                // binding.name 就是我们定义的这个全局指令的指令名 color 
                // binding.value 他的值 就是我们mycolor的值,red
                // binding.expression 字符串形式的指令表达式。就是我们的 mycolor
            }
        }) 
        var vm = new Vue({
            el:"#app",
            data:{
                msg:"输入姓名",
                mycolor :'red'
            }
            // 这个是私有指令,directive是全局指令
            directives:{
                'color':function(el,binding){
                    el.style.color = binding.value;
                }
            }
        })
    </script>
</body>
上一篇:Vue.js


下一篇:vue 自定义权限