vue自定义指令directive

先看下官方文档怎么解释:

vue2.0中,代码的复用和抽象主要形式是组件,然而有些情况需要对普通对象进行dom操作时,可用自定义指令:

局部指令:

    <div id="app">
        <input type="text" v-focus>
    </div>
<script>
// 页面加载输入框自动获取焦点
let vm = new Vue({
    el:"#app",
    data:{},
    directives:{
        focus:{
            inserted(ele,bindings){
                ele.focus();
            }
        }
    }
})
</script>

上边代码:自定义指令focus写在directives(指令)里边,inserted是自定义指令中的钩子函数:

自定义指令中钩子函数:

     bind:每当指令绑定到元素上时,会立即执行bind函数,只执行一次,通常会在此钩子中进行初始化的操作;

     inserted:表示元素插入到dom时,执行inserted函数,只触发一次;

     update:当VNode更新时会执行updated,可触发多次;

      componentUpdate:每当组件和子组件被更新时触发;

      unbind:一旦指令被移除时触发。。。、

所以上边例子中 ele.focus() 不能放在bind中,因为指令虽然绑定到元素上了,但元素还未插入到dom中,也就是元素还在内存中,未渲染到页面,而inserted则表示元素加载到页面上了,此时focus才生效。。。

   在来一个元素拖拽的例子:

<div id="app">
   <div class="drag" v-drag>=</div>
</div>
<script>
//在来一个元素拖拽
let vm = new Vue({
	el: "#app",
	directives: {
		drag: {
		  inserted(el) {
			el.onmousedown = function(e) {
				let disX = e.clientX - el.offsetLeft;
				let disY = e.clientY - el.offsetTop;
				document.onmousemove = function(e) {
				    el.style.top = e.clientY - disY + "px";
				    el.style.left = e.clientX - disX + "px";
				};
				el.onmouseup = function() {
				    el.onmousedown = document.onmousemove = null;
				};
				return false;
			};
		  },
		   update() {}
		}
	}
});
</sript>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值