UNPKG

1.08 kBJavaScriptView Raw
1/**
2 * @description 外部点击自定义指令
3 * @author SoldierAb
4 * @since 19-01-11
5 * @example
6 *
7 * <template>
8 * <div v-click-outside="func"></div>
9 * </template>
10 *
11 * <script>
12 * import clickOutside from '../utils/clickOutside';
13 *
14 * //全局注册
15 * Vue.directive('clickOutside',clickOutside);
16 *
17 * or ---
18 *
19 * //局部注册
20 *
21 * export default{
22 * directives:{clickOutside},
23 * }
24 *
25 * </script>
26 *
27 */
28
29
30const func=(el, binding, vnode)=>{
31 const documentHandler = (e) => {
32 if (el.contains(e.target)) return false;
33 if (binding.expression) binding.value(e);
34 }
35 el.__vueClickOutside__ = documentHandler;
36 document.addEventListener('click', documentHandler);
37}
38
39export default {
40 bind (el, binding, vnode) {
41 // return func(el, binding, vnode);
42 },
43 update (el, binding, vnode) {
44 return func(el, binding, vnode);
45 },
46 unbind (el, binding) {
47 document.removeEventListener('click', el.__vueClickOutside__);
48 delete el.__vueClickOutside__;
49 }
50};
51