From c6d4dd87958ce5c44dd4d04c82ca31ca82bf35c2 Mon Sep 17 00:00:00 2001 From: Meowtec Date: Wed, 21 Sep 2016 11:42:35 +0800 Subject: [PATCH] clickoutside: fix error unbind, and add update method --- src/utils/clickoutside.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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) {