From cd0a0bc8f9ff95378342c05dc8cb2088fa21cafc Mon Sep 17 00:00:00 2001 From: neverland Date: Thu, 16 Nov 2017 03:58:18 -0600 Subject: [PATCH] [new feature] optimize clickoutside (#324) * fix: Tabbar icon line-height * [new feature] progress add showPivot prop * [new feature] TabItem support vue-router * [new feature] update document header style * [Doc] add toast english ducoment * [bugfix] Search box-sizing wrong * [Doc] update vant-demo respo * [Doc] translate theme & demo pages * [Doc] add Internationalization document * [bugfix] remove unnecessary props * [fix] optimize clickoutside --- packages/utils/clickoutside.js | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/utils/clickoutside.js b/packages/utils/clickoutside.js index 28c8f36a9..0c796aef8 100644 --- a/packages/utils/clickoutside.js +++ b/packages/utils/clickoutside.js @@ -1,38 +1,39 @@ /** * v-clickoutside - * @desc 点击元素外面才会触发的事件 - * @example + * * ```vue - *
+ *
* ``` */ + import Vue from 'vue'; + const isServer = Vue.prototype.$isServer; -const clickoutsideContext = '@@clickoutsideContext'; +const context = '@@clickoutsideContext'; export default { - bind(el, binding, vnode) { - const documentHandler = function(e) { - if (vnode.context && !el.contains(e.target)) { - vnode.context[el[clickoutsideContext].methodName](); + bind(el, binding) { + const handler = event => { + if (!el.contains(event.target)) { + el[context].callback(); } }; - el[clickoutsideContext] = { - documentHandler, - methodName: binding.expression, + + el[context] = { + handler, + callback: binding.value, arg: binding.arg || 'click' }; - !isServer && document.addEventListener(el[clickoutsideContext].arg, documentHandler); + + !isServer && document.addEventListener(el[context].arg, handler); }, update(el, binding) { - el[clickoutsideContext].methodName = binding.expression; + el[context].callback = binding.value; }, unbind(el) { - !isServer && document.removeEventListener( - el[clickoutsideContext].arg, - el[clickoutsideContext].documentHandler); + !isServer && document.removeEventListener(el[context].arg, el[context].handler); }, install(Vue) {