|
@@ -1,41 +1,20 @@
|
|
|
-let nodeList = {}
|
|
|
-
|
|
|
-function createDocumentHandler(el, binding) {
|
|
|
- return function (e) {
|
|
|
- const target = e.target
|
|
|
- if (el.contains(target)) {
|
|
|
- return false
|
|
|
- }
|
|
|
- // if (binding.arg) {
|
|
|
- binding.value(e)
|
|
|
- // }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-const handler = e => {
|
|
|
-
|
|
|
- const { documentHandler } = nodeList
|
|
|
- if (documentHandler) {
|
|
|
- documentHandler(e)
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-window.addEventListener('click', handler)
|
|
|
-
|
|
|
const ClickOutSide = {
|
|
|
- beforeMount(el, binding) {
|
|
|
- nodeList = {
|
|
|
- documentHandler: createDocumentHandler(el, binding),
|
|
|
- }
|
|
|
- },
|
|
|
- updated(el, binding) {
|
|
|
- nodeList = {
|
|
|
- documentHandler: createDocumentHandler(el, binding),
|
|
|
- }
|
|
|
- },
|
|
|
- unmounted() {
|
|
|
- window.removeEventListener('click', handler)
|
|
|
- },
|
|
|
+ beforeMount(el, binding) {
|
|
|
+ function documentHandler(e) {
|
|
|
+ if (el.contains(e.target)) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ binding.value(e)
|
|
|
+ }
|
|
|
+ el.__vueClickOutside__ = documentHandler
|
|
|
+ document.addEventListener('click', documentHandler)
|
|
|
+ },
|
|
|
+ updated(el, binding) {
|
|
|
+ },
|
|
|
+ unmounted(el) {
|
|
|
+ document.removeEventListener('click', el.__vueClickOutside__)
|
|
|
+ delete el.__vueClickOutside__
|
|
|
+ },
|
|
|
}
|
|
|
|
|
|
export default ClickOutSide
|