Vue.js中的自定义指令directives

除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。自定义指令,需要声明钩子函数。注册自定义指令也分为注册全局自定义指令和注册局部自定义指令。两者用法相同,局部指令只能在当前组件里面使用。当全局指令和局部指令同名时以局部指令为准。

1.  自定义指令中的钩子函数

一个指令定义对象可以提供如下几个钩子函数 (均为可选):bind、inserted、update、componentUpdated和unbind。

bind         =>  指令被绑定到元素上时执行,只会执行一次
inserted   =>  被绑定的元素被插入到父节点时执行,只会执行一次
update     =>  当虚拟DOM被重新渲染时执行
componentUpdated   =>  当虚拟DOM重新渲染完成后执行
unbind     =>  指令与元素解绑时调用,只会执行一次

2.  钩子函数中的参数

指令钩子函数会被传入以下参数:el、binding、vnode和oldVnode。

el           =>    被绑定的DOM对象
binding   =>     是一个包含了指令的所有属性的对象,例如:name、rawName、value
vnode     =>     Vue 编译生成的虚拟节点
oldVnode   =>  上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用

3.  动态指令参数

指令的参数可以是动态的。例如,在 v-mydirective:[argument]="value" 中,argument 参数可以根据组件实例数据进行更新!这使得自定义指令可以在应用中被灵活使用。

下面我们通过一个案例来看一下。

<body>
		<div id="app">
			{{i}} <button @click="i++">+</button>
			<div v-red>Hello</div>
			<!-- 动态指令参数:通过改变value值,可以改变参数从而进行数据更新 -->
			<div v-color="'pink'">测试</div>
		</div>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			new Vue({
				el: '#app',
				data: {
					i: 0
				},
				directives: {
					red: { //自定义red指令,需要声明钩子函数
						bind(){
							console.log('bind...')
						},
						inserted(el){
							console.log('inserted...', el)
							// el.style.color = 'red'
							// console.log(el.style)
							el.style.color = 'red'
						},
						update(){
							console.log('update....')
						},
						componentUpdated(){
							console.log('componentUpdated...')
						},
						unbind(){
							console.log('unbind...')
						}
					},
					color: {
						inserted(el,binding){
							console.log(binding)
							el.style.color = binding.value
						}
					}
				}
			})
		</script>
	</body>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值