diff --git a/src/utils/clickoutside.js b/src/utils/clickoutside.js
index f5e8bdb89..173c8c3ba 100644
--- a/src/utils/clickoutside.js
+++ b/src/utils/clickoutside.js
@@ -6,21 +6,28 @@
*
* ```
*/
-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);
},
- unbind() {
- document.removeEventListener('click', handler);
+ update(el, binding) {
+ el[clickoutsideContext].methodName = binding.expression;
+ },
+
+ unbind(el) {
+ document.removeEventListener('click', el[clickoutsideContext].documentHandler);
},
install(Vue) {