Vue自定义指令封装及用法

Vue自定义指令

vue中的指令很多,例如v-if,v-for,v-model等等,当然尤大大也给我们提供了自定义属性这一 玩意儿,让我们也可自己定义指令,例如v-hello,v-fuck等等,那我们为什么需要自定义指令呢?那好,我就问你一句话,你在写项目当中有没有某一刻有想要操纵DOM 的冲动,但是vue很明确是不能直接操纵DOM的,那这时候就可以用到我们的自定义指令了。具体操作,如下所示:

主要是通过Vue.directive来定义!

  <script>
        Vue.directive('hello',{
     
            inserted(){
     //这个名字是固定的
                console.log("加油,中国!")
            }
        })
        var vm=new Vue({
     
            el:"#box"
        })
    </script>

具体用法:

    <div id="box">
        <div v-hello>加油,武汉!</div>
    </div>

当然了,我们的自定义指令也可以传参。具体用法,如下所示:

其实道理一样,只是我们传递了el和bind两个参数。el是节点的意思,大家都知道,而bind是从哪儿来的呢?

  <script>
        Vue.directive('color',{
     
            inserted(el,bind){
     
                console.log(bind)
                el.style.background=bind.value
            }
        })
        var vm=new Vue({
     
            el:"#box"
        })
    </script>

通过打印bind我们可以看到,它包含我们指令的所有信息

Vue自定义指令封装及用法_第1张图片
在使用过程中我们需要注意的就是要将传递的参数当做字符串来传,所以需要再加“ ”
Vue自定义指令封装及用法_第2张图片
接下来我们看一种情况
Vue自定义指令封装及用法_第3张图片
以我上面这种写法,我在控制台当中通过vm.mycolor:"red"来改变mycolor的值
Vue自定义指令封装及用法_第4张图片
然而视图并没有更新,那是因为指令也是有生命周期的,inserted:插入(只执行一次)
所以要想达到上面的那种效果,我们要引进另一生命周期,update:更新阶段
Vue自定义指令封装及用法_第5张图片
这样,就达到了我们想要的效果了。
Vue自定义指令封装及用法_第6张图片

你可能感兴趣的:(Vue,vue.js)