Vue中的自定义指令

目录

一,自定义指令-钩子函数

二,自定义指令-钩子函数参数


 

一,自定义指令-钩子函数

自定义指令:除了内置指令,Vue也允许用户自定义指令;

注册指令:通过全局API Vue.directive可以注册自定义指令;

自定义指令的钩子函数:

  • bind
  • inserted
  • update
  • componentUpdated
  • unbind

自定义指令的使用:在自定指令的名称前加 上 v-

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>09_Custom_Directive</title>
		<script type="text/javascript" src="../js/vue.js" ></script>

	</head>
	<body>
		<div id="sikiedu">
			<input type="text" v-model="name" /><br />
			name : <span v-demo ref='name'>{{name}}</span><br />
			msg : <span v-if="flag">HelloVue</span><br />
			<button @click="flag = !flag">解除绑定</button><br />
		</div>
	</body>
	
	<script>
		
		Vue.directive('demo', {
			//指令的钩子函数
			bind(){
				alert("bind 首次绑定到元素时候执行,它只执行一次,常用于初始化操作");
			},
			inserted(){
				alert("inserted 插入到父节点之后,也就是DOM对象");
			},
			unbind(){
				alert("unbind 解除绑定");
			},
			update(){
				alert("update 绑定该指令的元素 所在的Vue实例挂载的DOM树 发生更新时调用" + " name = " + vm.$refs.name.textContent);
			},
			componentUpdated(){
				alert("componentUpdated 更新后调用" + " name = " + vm.$refs.name.textContent);
			}
		});
		
		let vm = new Vue({
			data : {
				name : 'Joey',
				flag : true
			}
		}).$mount('#sikiedu');
	
	</script>
</html>

 

二,自定义指令-钩子函数参数

自定义指令的钩子函数参数:自定义指令的钩子函数可以传递4个参数,分别是elbindingvnodeoldVnode

具体描述见官网API点击我进入

  • el:获取DOM对象;
  • binding:一个包含很多属性的对象;
  • vnodeVue编译生成的虚拟节点;
  • oldVnode:上一个虚拟节点;
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>10_Custom_Directive_01</title>
		<script type="text/javascript" src="../js/vue.js" ></script>

	</head>
	<body>
		<div id="sikiedu">
			<input type="text" v-model="name" /><br />
			name : <span v-demo='name' ref='name'>{{name}}</span><br />
			<!--<button v-on:click="flag = !flag">解除绑定</button><br />-->
		</div>
	</body>
	
	<script>
		
		Vue.directive('demo', {	
			//指令的钩子函数
			bind(el, binding){
				console.log(el);
				el.style.color =  'red';
				console.log(binding);
				console.log(binding.name);
				console.log(binding.value);
				
				if(binding.arg === 'click'){
					console.log("执行点击事件");
				}
				
			},
			update(el, binding){
				console.log("update value = " + binding.value);
				console.log("update oldvalue = " +binding.oldValue);
			}
		});
		
		let vm = new Vue({
			data : {
				name : 'lijiang',
				flag : true
			}
		}).$mount('#sikiedu');
	
	</script>
</html>

自定义指令的简写;

局部自定义指令;

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>11_Custom_Directive_02</title>
		<script type="text/javascript" src="../js/vue.js" ></script>

	</head>
	<body>
		<div id="sikiedu">
			<input type="text" v-model="name" v-focus/><br />
			name : <span v-font_style:red>{{name}}</span><br />
		</div>
	</body>
	
	<script>
		
		Vue.directive('demo', function(){
			alert(1);
		});
		
		let vm = new Vue({
			data : {
				name : 'Joey'
			},
			directives : {
				font_style : function(el, binding){
					el.style.color = binding.arg;
					console.log(binding);
				},
				focus : {
					inserted(el){
						el.focus();
					}
				}
			}
		}).$mount('#sikiedu');
	
	</script>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值