diff --git a/packages/mixins/click-outside.js b/packages/mixins/click-outside.js new file mode 100644 index 000000000..eac57ff31 --- /dev/null +++ b/packages/mixins/click-outside.js @@ -0,0 +1,17 @@ +import { on, off } from '../utils/event'; + +export default config => ({ + mounted() { + config.handler = event => { + if (!this.$el.contains(event.target)) { + this[config.method](); + } + }; + + on(document, config.event, config.handler); + }, + + beforeDestroy() { + off(document, config.event, config.handler); + } +}); diff --git a/packages/swipe-cell/index.vue b/packages/swipe-cell/index.js similarity index 58% rename from packages/swipe-cell/index.vue rename to packages/swipe-cell/index.js index f2fcdfcd9..5a5ebd7db 100644 --- a/packages/swipe-cell/index.vue +++ b/packages/swipe-cell/index.js @@ -1,48 +1,15 @@ - - - diff --git a/packages/utils/clickoutside.js b/packages/utils/clickoutside.js deleted file mode 100644 index 734616f21..000000000 --- a/packages/utils/clickoutside.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * v-clickoutside - * - * ```vue - *
- * ``` - */ - -import { on, off } from './event'; - -const context = '@@clickoutsideContext'; - -export default { - bind(el, binding) { - const handler = event => { - if (!el.contains(event.target)) { - el[context].callback(); - } - }; - - el[context] = { - handler, - callback: binding.value, - arg: binding.arg || 'click' - }; - - on(document, el[context].arg, handler); - }, - - update(el, binding) { - el[context].callback = binding.value; - }, - - unbind(el) { - off(document, el[context].arg, el[context].handler); - }, - - install(Vue) { - Vue.directive('clickoutside', { - bind: this.bind, - unbind: this.unbind - }); - } -};