详解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中字符串的定义示例代码
Dec 19 Javascript
深入浅析javascript立即执行函数
Oct 23 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 Javascript
js判断手机号是否正确并返回的实现代码
Jan 17 Javascript
footer定位页面底部(代码分享)
Mar 07 Javascript
字太多用...代替的方法(两种)
Mar 15 Javascript
Bootstrap模态框插入视频的实现代码
Jun 25 Javascript
vue中的模态对话框组件实现过程
May 01 Javascript
JS数组splice操作实例分析
Oct 12 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 Javascript
js实现简单图片拖拽效果
Feb 22 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
PHP Undefined index报错的修复方法
2011/07/17 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
JS模板实现方法
2013/04/03 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
javascript实现日期时间动态显示示例代码
2015/09/08 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
使用python为mysql实现restful接口
2018/01/05 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
tensorflow如何批量读取图片
2019/08/29 Python
logging level级别介绍
2020/02/21 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
zooplus意大利:在线宠物商店
2019/08/07 全球购物
银行批评与自我批评
2014/02/10 职场文书
优秀毕业生求职信
2014/06/05 职场文书
奥运会口号
2014/06/13 职场文书
代理人委托书
2014/08/01 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
MySQL创建高性能索引的全步骤
2021/05/02 MySQL