vue.js自定义指令

​​一、vue自定义指令包括4部分:指令名称、参数、修饰符、表达式

v-dire:arg.e="expression"

指令名称:参数.修饰符="表达式"

 

二、自定义指令有全局注册指令、局部注册指令。全局注册指令又分函数注册形式、对象注册形式。

全局注册指令,使用Vue的directive函数实现

函数注册形式示例:

Vue.directive('dire',function(el,bindings,vnode){

    console.log("自定义指令");

});

参数说明:

dire 指令名称

el 当前绑定的dom元素

bindings 指令解析后的结果,包括指令名称、参数、表达式等,bindings.vaule返回的是表达式

vnode 对应的虚拟dom

 

对象注册形式示例:

Vue.directive('dire',{

    bind:function(el,bindings,vnode){

        console.log("bind--最先执行的钩子函数");

    },

    inserted:function(el,bindings,vnode){

        console.log("inserted--在bind后面执行");

    },

    update:function(el,bindings,vnode){

        console.log("update--绑定组件更新前触发执行");

    },

    componentUpdated:function(el,bindings,vnode){

        console.log("componentUpdated--绑定组件更新后触发执行");

    },

    unbind:function(el,bindings,vnode){

        console.log("componentUpdated--组件销毁前触发执行");

    }

});

 

局部注册指令示例:

var vm = new Vue({

    el:'#app',

    data:{

        x:0
    },

    directives:{ //指令局部注册

        dire:{  //dire指令名称

            bind:function(el,bindings,vnode){

                console.log("bind--最先执行的钩子函数");

            },

            inserted:function(el,bindings,vnode){

                console.log("inserted--在bind后面执行");

            },

            update:function(el,bindings,vnode){

                console.log("update--绑定组件更新前触发执行");

            },

            componentUpdated:function(el,bindings,vnode){

                console.log("componentUpdated--绑定组件更新后触发执行");

            },

            unbind:function(el,bindings,vnode){

                console.log("componentUpdated--组件销毁前触发执行");

            }

        }

    }

});

 

下面用vue实现一个弹出对话框的指令,步骤如下:

1、使用Vue的directive函数实现自定义指令,放在文件dire.js中,代码如下:

Vue.directive('dire',function(el,bindings,vnode){

    console.log("el:");

    console.log(el);

    console.log("bindings:");

    console.log(bindings);

    console.log("vnode:");

    console.log(vnode);

    var value=bindings.value;//bindings.vaule返回的是第一点中的 表达式,该表达式是对象

    var callback=value.callback;//表达式里的callback属性

    var msg = value.msg;

    callback.call(this,el,msg);//调用指令传进来的函数handleDire

});

 

2、在app.js文件里生成一个Vue对象,Vue对象的el属性绑定id=appDire的div元素

var one = new Vue({

    el: "#appDire",

    data: {},

    methods: {

        handleDire: function(el, value) {//该函数是作为自定义指令的表达式(作回调函数用)

             alert(value);

        }

    }

});

 

3、实现index.html文件

1)引入vue.js,可引用本地,也可以引用网络的
2)引入dire.js

3)引入app.js

<!DOCTYPE html>

<html lang="en">

     <head>

       <meta charset="UTF-8" />

       <meta name="viewport" content="width=device-width,initial-scale=1.0" />

        <meta http-equiv="X-UA-Compatible" content="ie=edge" />

        <script src="vue.js"></script>

        <title>vueDire</title>

    </head>

    <body>

        <div id="appDire">

              <div v-dire:arg.e="{callback:handleDire,msg:'指令弹框'}"></div>

        </div>

    </body>

     <script src="dire.js"></script>

     <script src="app.js"></script>

</html>

这三四个文件放在同一个路径下,如下图:

运行结果:

​​

f12打印值

 


​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值