详解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 相关文章推荐
可选择和输入的下拉列表框示例
Nov 05 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
Mar 12 Javascript
JQuery fileupload插件实现文件上传功能
Mar 18 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
Sep 19 Javascript
原生js验证简洁注册登录页面
Dec 17 Javascript
使用JavaScript实现一个小程序之99乘法表
Sep 21 Javascript
WebSocket的通信过程与实现方法详解
Apr 29 Javascript
vue组件挂载到全局方法的示例代码
Aug 02 Javascript
Vue-axios-post数据后端接不到问题解决
Jan 09 Javascript
JS document文档的简单操作完整示例
Jan 13 Javascript
js实现滑动滑块验证登录
Jul 24 Javascript
ElementUI实现el-form表单重置功能按钮
Jul 21 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
请离开include_once和require_once
2013/07/18 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
详解Python爬虫的基本写法
2016/01/08 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
Python常用的json标准库
2019/02/19 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
Python求凸包及多边形面积教程
2020/04/12 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
工商技校毕业生自荐信
2013/11/15 职场文书
公司请假条格式
2014/04/11 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
学校食品安全责任书
2015/01/29 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
大专护理专业自荐信
2015/03/25 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript