Ver Fonte

Merge pull request #104 from meowtec/fix-clickoutside

clickoutside: fix incorrect unbind, and add update method
杨奕 há 9 anos atrás
pai
commit
495e24a81e
1 ficheiros alterados com 14 adições e 7 exclusões
  1. 14 7
      src/utils/clickoutside.js

+ 14 - 7
src/utils/clickoutside.js

@@ -6,21 +6,28 @@
  * <div v-element-clickoutside="handleClose">
  * ```
  */
-let handler;
+const clickoutsideContext = '@@clickoutsideContext';
 
 export default {
   bind(el, binding, vnode) {
-    const expression = binding.expression;
-    handler = function(e) {
+    const documentHandler = function(e) {
       if (vnode.context && !el.contains(e.target)) {
-        vnode.context[expression]();
+        vnode.context[el[clickoutsideContext].methodName]();
       }
     };
-    document.addEventListener('click', handler);
+    el[clickoutsideContext] = {
+      documentHandler,
+      methodName: binding.expression
+    };
+    document.addEventListener('click', documentHandler);
+  },
+
+  update(el, binding) {
+    el[clickoutsideContext].methodName = binding.expression;
   },
 
-  unbind() {
-    document.removeEventListener('click', handler);
+  unbind(el) {
+    document.removeEventListener('click', el[clickoutsideContext].documentHandler);
   },
 
   install(Vue) {