Merge pull request #104 from meowtec/fix-clickoutside

clickoutside: fix incorrect unbind, and add update method
pull/110/head
杨奕 2016-09-21 00:50:51 -05:00 committed by GitHub
commit 495e24a81e
1 changed files with 14 additions and 7 deletions

View File

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