自定义指令好处很多,有时候很多简单的功能形不成方法,但是调用的地方有很多,这时候使用自定义指令其实是一个不错的选择,下面就是一个简单的自定义指令实现一个倒置时:
看图
<!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...