老杜Vue2+3 (51) 自定义指令

1.两种自定义指令的语法格式

1.1函数式(局部指令)

注意事项:(函数式)
1.// 指令名字不需要写v-,(建议全部小写),如果有多个单词建议使用-连接
2.// 关于这个回调函数的调用,当指令和标签进行第一次绑定的时候调用,当模板再次解析的时候调用
3.// 这个函数有两个参数,第一个参数是一个真实的dom元素,第二个参数为指令和标签的一种绑定对象

局部指令定义语法格式:
	1.需要使用新的配置项directives :{
		 	指令名:function(element,binding){
		 }
	}

具体案例:模仿v-text从变量中取值插入到标签中,仿写一个v-text-danger (使插入的字体为red)
代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义指令</title>
    <script src="../../js/vue.js"></script>
</head>
<body>
    <div id="mydiv">
        <h1>自定义指令</h1>
        <h2 v-text-danger="msg"></h2>
    </div>
    
    <script>
        const vm =new Vue({
            el: '#mydiv',
            data:{
               msg:"nnbbb"
            },
            directives:{
                'text-danger':function(element,binding){
                        // element(标签<h2>)的innerText的值为binding的value,也就是data中的msg
                        element.innerText=binding.value
                        element.style.color='red'

                }
            }
        })
    </script>
</body>
</html>

1.2对象式(局部指令)

注意事项:(对象式)
1.有三个固定的函数(在不同阶段调用)
2.函数中的参数都有两个,一个element,和一个binding
如下图
在这里插入图片描述
具体案例:写一个从变量中拿取数据插入对应位置,并使父类元素背景颜色变绿的指令 v-text-bkgreen

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义指令</title>
    <script src="../../js/vue.js"></script>
</head>
<body>
    <div id="mydiv">
        <h1>自定义指令</h1>
        <h2 v-text-danger="msg"></h2>
        <input type="text" v-text-bkgreen="msg">
    </div>
    
    <script>
        const vm =new Vue({
            el: '#mydiv',
            data:{
               msg:"nnbbb"
            },
            directives:{
                'text-danger':function(element,binding){
                        // element(标签<h2>)的innerText的值为binding的value,也就是data中的msg
                        element.innerText=binding.value
                        element.style.color='red'

                },
                'text-bkgreen':{
                    bind(element,binding){
                        element.value=binding.value
                    },

                    inserted(element,binding){
                        element.parentNode.style.backgroundColor ='green'
                    },

                    update(element,binding){
                        element.value=binding.value
                    }

                }
            }
        })
    </script>
</body>
</html>

2.定义全局指令

语法:
函数式:


Vue.directive(‘指令名’,function(element,binding){

})

对象式:

Vue.directive('指令名',{
	bind(element,binding){
	},
	inserted(element,binding){
	}
	update(element,binding){
	}
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值