clickoutside: fix error unbind, and add update method

pull/104/head
Meowtec 2016-09-21 11:42:35 +08:00
parent 3a00406851
commit c6d4dd8795
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) {