Vue 自定义指令完成点击元素外触发事宜

媒介 近来搞了毕设,须要完成一个场景,点击一块地区,弹出一个编辑地区,点击页面的其他地方的时刻,这个编辑地区就隐蔽,本想一想之前写模态框一样写个要领的时刻,倏忽
《Vue 自定义指令完成点击元素外触发事宜》
以为能够尝试用 vue 相干的东西文雅的处理这个事变,然后就学了下面的自定义指令了。

前置学问

既然要用 Vue 的自定义指令,那末一定要相识一下 Vue 自定义指令的相干学问啦,关于这部份的内容,看我之前写过的《Vue 自定义指令》或许直接看官方文档就能够啦,这里我就不再多讲了。

处理思绪

这个根据我之前写模态框的履历,我的做法是给 document 绑定一个点击事宜,然后推断触发点击事宜的谁人元素是不是是模态框地点的目的地区,假如不是,那末就触发隐蔽事宜。看一下代码吧

$(document).mouseup(function(e){
  var _con = $(' 目的地区 ');   // 设置目的地区
  if(!_con.is(e.target)){ // 推断是不是是目的地区
    some code...   // 功用代码
  }
});

完成

有了思绪,完成起来就简朴了。就直接放定义的代码啦

const clickOutside = {
  // 初始化指令
  bind(el, binding, vnode) {
    function clickHandler(e) {
      // 这里推断点击的元素是不是是自身,是自身,则返回
      if (el.contains(e.target)) {
        return false;
      }
      // 推断指令中是不是绑定了函数
      if (binding.expression) {
        // 假如绑定了函数 则挪用谁人函数,此处binding.value就是handleClose要领
        binding.value(e);
      }
    }
    // 给当前元素绑定个私有变量,方便在unbind中能够消除事宜监听
    el.__vueClickOutside__ = clickHandler;
    document.addEventListener('click', clickHandler);
  },
  update() {},
  unbind(el, binding) {
    // 消除事宜监听
    document.removeEventListener('click', el.__vueClickOutside__);
    delete el.__vueClickOutside__;
  },
};


directives: {clickOutside},

接下来就能够就能够在组件内直接运用啦

<div v-click-outside="closeDialog"></div>

我完成的结果
《Vue 自定义指令完成点击元素外触发事宜》

然后关于这个点击元素外触发某个事宜,假如另有啥其他文雅的体式格局的话,下面留言分享一下哈。

    原文作者:小红帽
    原文地址: https://segmentfault.com/a/1190000017166675
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞