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) {