自定义指令好处很多,有时候很多简单的功能形不成方法,但是调用的地方有很多,这时候使用自定义指令其实是一个不错的选择,下面就是一个简单的自定义指令实现一个倒置时:
看图
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://unpkg.com/vue"></script>
</head>
<body>
<div id="app">
<button v-countdown='5'>click</button>
<br/>
</div>
</body>
<script>
function countdownTime(binding) {
let time = binding.value || 10;
let timer = setInterval(function () {
if (time > 1) {
--time;
binding.elm.innerHTML = "倒置时还有:" + time + "(秒)";
} else {
binding.elm.innerHTML = "click";
clearInterval(timer);
}
}, 1000);
}
Vue.directive('countdown', {
bind(el, vnode, binding) {
el.addEventListener("click", function () {
countdownTime(binding);
});
},
unbind(el, binding) {
el.removeEventListener("click", countdownTime(binding));
}
});
var vm = new Vue({
el: "#app",
});
</script>
</html>
api说明:
- bind 只调用一次,指令第一次绑定到元素时调用,在这里可以进行一次性初始化设置
- inserted 被绑定元素插入福接单是调用(仅保证父节点存在,但不一定已被插入文档中)
- update 所在组件的VNode更新时调用,但是可能发生在其子VNode更新之前,指令的值可能发生了改变,也可能没有,但是可以通用比较更新前后的值来忽略不必要的模板更新
- componentUpdated 指令所在组件的VNode及其子VNode全部跟新后调用
- unbind 值调用一次,指令与元素解绑时调用
github地址:https://github.com/wqb2017/my…