yunser-ui-vue
Version:
material design ui for vue2
36 lines (32 loc) • 918 B
JavaScript
/**
* element https://github.com/ElemeFE/element
* clickoutside.js
*/
const clickoutsideContext = '@@clickoutsideContext'
export default {
bind (el, binding, vnode) {
const documentHandler = function (e) {
if (!vnode.context || el.contains(e.target)) return
if (binding.expression) {
vnode.context[el[clickoutsideContext].methodName](e)
} else {
el[clickoutsideContext].bindingFn(e)
}
}
el[clickoutsideContext] = {
documentHandler,
methodName: binding.expression,
bindingFn: binding.value
}
setTimeout(() => {
document.addEventListener('click', documentHandler)
}, 0)
},
update (el, binding) {
el[clickoutsideContext].methodName = binding.expression
el[clickoutsideContext].bindingFn = binding.value
},
unbind (el) {
document.removeEventListener('click', el[clickoutsideContext].documentHandler)
}
}