Vue2自定义指令directives简介

我们在学习vue的时候会学习多个指令,如v-show,v-text,v-pre等等。但如果我们想要完成一些现有指令无法完成的操作的时候,就应该使用自定义指令来实现我们想要的操作。所以现在我们就来简单讲解Vue自定义指令directives。

目录

自定义指令directives

全局指令

案例:自定义指令之输入框的聚焦指令

 局部指令

带参数的自定义指令

自定义指令directives的钩子函数


自定义指令有全局指令局部指令

自定义指令directives

全局指令

全局指令不在 new Vue里面写, 脱离 new Vue()。

 Vue.directive() 他是一个函数,它拥有两个参数。参数1: 自定义指令的名字,参数2是一个对象。

   Vue.directive(参数1,参数2)

   Vue.directive( '自定义指令的名字' ,{

//内容,自定义指令的钩子函数与其要实现的功能的代码块

})

案例:自定义指令之输入框的聚焦指令

结合案例讲解会清楚易懂,代码如下:

<div id="app">
    <input type="text" v-focus>
</div>

 我们为这个自定义指令取名为focus,用v-名字的办法使用它。在自定义指令的第二个参数里面,使用自定义指令的钩子函数inserted(){},写一个函数,传参是el,指令绑定的那个元素。在函数内使用el.focus()来使得输入框聚焦。

在使用自定义指令的时候,我们需要使用到自定义指令的钩子函数。在最后我们会有解释。

//指令
//全局指令-不在vue里面写,
//局部指令- 在vue里面写
Vue.directive('focus', {
    //inserted 被绑定原生插入节点时候调用的钩子函数,可以看成一个普通函数
    //在调用focus的时候就是在调用inserted,然后执行的focus这个方法
    inserted(el) {// inserted是函数,不可更改,否则不执行不聚焦
        console.log(el);
        // el 表示指令所绑定的元素,用来操作我们的dom,他是一个方法
        // el 会自动把input里面焦点自动获取出来,相当于给input绑定一个事件
        //focus 式原生的获取焦点事件名称
        el.focus()
        }
})    
 new Vue({
     el: '#app',
     data: {

     },
     methods: {

     },
})    

效果如图:在打开页面的时候就完成了输入框聚焦。

 局部指令

局部指令- 在vue实例里面写

new Vue({

      el:'#app',

      data:{},

      directives:{//这个就是局部指令

                自定义指令名字:{

                        //代码块

                }

        }

    })

我们尝试使用局部指令完成输入框的聚焦指令。

代码如下:

 new Vue({
            el: '#app',
            data: {

            },
            methods: {

            },
            directives: {
                focus: {
                inserted(el) {
                    console.log(el);
                    el.focus()
                }
            }
            }
        })

带参数的自定义指令

自定义指令是可以传递参数的,比如说v-指令名="携带的参数",这个携带的参数,就是会从我们vue实例的data里面去寻找的数据。

直接上案例,我们写了一个div,想用自定义指令的方式把这个div里面的文字变成红色,然后写了一个h1标签,想为这个h1标签的背景颜色变成蓝色:

<div id="app">
    <div v-color="redss">内容</div>
    <h1 v-background-color="back">hahaha</h1>
</div>

 首先我们在vue实例data里面写好相应的数据,在后面在自定义指令里面当作参数进行传递。

然后我们在局部自定义指令里面,使用bind这个钩子函数,参数是el(自定义绑定的元素)和binding(含有传递参数的信息,是一个对象,建议打印一下这个binding仔细看看)。

最后在函数代码块内,把 binding.value.color(参数里面所需要的数据)赋值给el.style.color(元素的具体样式) 就好了。

 new Vue({
            el: '#app',
            data: {
                redss: {
                    color: 'red'
                },
                back:{
                    backgroundcolor:'blue'
                }
            },
            methods: {
          
            },
            directives: {//局部的自定义指令
                color: {//color是一个对象
                    bind(el, binding) {//binging是参数,也是一个对象
                        console.log(binding);
                        el.style.color = binding.value.color
                    }
                },
                backgroundColor:{
                    bind(el, binding) {//binging是参数,也是一个对象
                        // console.log(binding);
                        el.style.background = binding.value.backgroundcolor
                    }
                }
            },

        })

效果:

 全局指令的传参与此类似,不多赘述。

自定义指令directives的钩子函数

在使用自定义指令的时候我们都会使用到自定义指令的钩子函数,就是分别在自定义指令绑定元素生效到解绑失效时候,分别会在不同时间执行的普通函数。我们代码的书写,就是写这几个钩子函数里面,配合钩子函数不同的执行时间来实现不同的,我们想要的效果。

(1) bind()绑定指令到元素上,只执行1次。

(2) inserted ()绑定 了指令的元素插入到页面中展示时调用,很常用。

(3) update ()所有组件节 点更新时调用

(4) componentUpdated() 指令所在的节点及其子节点全部更新完成后调用。

(5)unbind ()  解除指令和元素的绑定,只执行1次。

猜你喜欢

转载自blog.csdn.net/zhangawei123/article/details/129006640
今日推荐