UNPKG

sk-smart-ui

Version:

简洁快速的vue ui框架

42 lines (40 loc) 1.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); /** * v-clickoutside * @desc 点击元素外面才会触发的事件 * @example * ```vue * <div v-element-clickoutside="handleClose"> * ``` */ var clickoutsideContext = '@@clickoutsideContext'; exports.default = { bind: function bind(el, binding, vnode) { var documentHandler = function documentHandler(e) { if (vnode.context && !el.contains(e.target)) { vnode.context[el[clickoutsideContext].methodName](); } }; el[clickoutsideContext] = { documentHandler: documentHandler, methodName: binding.expression, arg: binding.arg || 'click' }; document.addEventListener(el[clickoutsideContext].arg, documentHandler); }, update: function update(el, binding) { el[clickoutsideContext].methodName = binding.expression; }, unbind: function unbind(el) { document.removeEventListener(el[clickoutsideContext].arg, el[clickoutsideContext].documentHandler); }, install: function install(Vue) { Vue.directive('clickoutside', { bind: this.bind, unbind: this.unbind }); } };