html 如何在Vue中检测单击外部元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html 如何在Vue中检测单击外部元素相关的知识,希望对你有一定的参考价值。

...

Vue.directive('click-outside', {
  bind: function (el, binding, vNode) {
    // Provided expression must evaluate to a function.
    if (typeof binding.value !== 'function') {
      const compName = vNode.context.name
      let warn = `[Vue-click-outside:] provided expression '${binding.expression}' is not a function, but has to be`
      if (compName) { warn += `Found in component '${compName}'` }
      console.warn(warn)
    }
    // Define Handler and cache it on the element
    const bubble = binding.modifiers.bubble
    const handler = (e) => {
      if (bubble || (!el.contains(e.target) && el !== e.target)) {
        binding.value(e)
      }
    }
    el.__vueClickOutside__ = handler

    // add Event Listeners
    document.addEventListener('click', handler)
  },
  unbind: function (el, binding) {
    // Remove Event Listeners
    document.removeEventListener('click', el.__vueClickOutside__)
    el.__vueClickOutside__ = null
  }
})

...
<template>
  <div v-if="menuIsOpen" v-click-outside="mutationIsOpen">
    <!-- content -->
  <div/>
</template>

以上是关于html 如何在Vue中检测单击外部元素的主要内容,如果未能解决你的问题,请参考以下文章

聚合物:检测自定义元素外部的单击

Vue.js 自定义指令使用 TypeScript 检测点击外部元素

检测是不是使用外部 JavaScript 文件创建了 html 元素

使用 JavaScript e.target 在元素外部单击不起作用

如何检测指令元素是不是*未*在 Angular 中单击

在 Bootstrap 3 中单击导航栏元素外部时如何关闭打开的折叠导航栏?