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 |
|
30 | const 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 |
|
39 | export 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 |
|