详解vue中点击空白处隐藏div的实现(用指令实现)


Posted in Javascript onApril 19, 2018

简单想应该怎么实现?

1、肯定是给document增加一个click事件监听
2、当发生click事件的时候判断是否点击的当前对象
结合着本思路和指令咱们来实现。

简单介绍vue指令

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

  1. bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  2. inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
  3. update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
  4. componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
  5. unbind:只调用一次,指令与元素解绑时调用。

接下来我们来看一下钩子函数的参数 (即 el、binding、vnode 和 oldVnode)。

详解vue中点击空白处隐藏div的实现(用指令实现)

代码实现

创建指令对象,分析放在代码中

<template>
 <div>
 <div class="show" v-show="show" v-clickoutside="handleClose">
  显示
 </div>
 </div>
</template>

<script>
const clickoutside = {
 // 初始化指令
  bind(el, binding, vnode) {
    function documentHandler(e) {
  // 这里判断点击的元素是否是本身,是本身,则返回
      if (el.contains(e.target)) {
        return false;
  }
  // 判断指令中是否绑定了函数
      if (binding.expression) {
  // 如果绑定了函数 则调用那个函数,此处binding.value就是handleClose方法
        binding.value(e);
      }
 }
 // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听
    el.__vueClickOutside__ = documentHandler;
    document.addEventListener('click', documentHandler);
  },
  update() {},
  unbind(el, binding) {
 // 解除事件监听
    document.removeEventListener('click', el.__vueClickOutside__);
    delete el.__vueClickOutside__;
  },
};
export default {
  name: 'HelloWorld',
  data() {
    return {
      show: true,
    };
  },
  directives: {clickoutside},
  methods: {
    handleClose(e) {
      this.show = false;
    },
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.show {
  width: 100px;
  height: 100px;
  background-color: red;
}
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 事件处理程序介绍
Jun 27 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
Oct 10 Javascript
浅析Jquery操作select
Dec 13 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
Jan 11 Javascript
vue 2.0路由之路由嵌套示例详解
May 08 Javascript
vue实现全选、反选功能
Nov 17 Javascript
vue + vuex todolist的实现示例代码
Mar 09 Javascript
修改npm全局安装模式的路径方法
May 15 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 Javascript
通过jQuery学习js类型判断的技巧
May 27 jQuery
VUE 自定义组件模板的方法详解
Aug 30 Javascript
JavaScript常用工具函数大全
May 06 Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 #Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 #Javascript
JS使用setInterval实现的简单计时器功能示例
Apr 19 #Javascript
vue 实现通过手机发送短信验证码注册功能
Apr 19 #Javascript
详解react-redux插件入门
Apr 19 #Javascript
vuex state及mapState的基础用法详解
Apr 19 #Javascript
使用vuex的state状态对象的5种方式
Apr 19 #Javascript
You might like
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
不可错过的十本Python好书
2017/07/06 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python生成九宫格图片
2018/11/19 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
蔻驰法国官网:COACH法国
2018/11/14 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
幼儿园毕业园长感言
2014/02/24 职场文书
大学新生军训方案
2014/05/03 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
Python序列化与反序列化相关知识总结
2021/06/08 Python
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers