详解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 相关文章推荐
JS字符串函数扩展代码
Sep 13 Javascript
JS二维数组的定义说明
Mar 03 Javascript
js获取鼠标点击的位置实现思路及代码
May 09 Javascript
jQuery动画效果相关方法实例分析
Dec 31 Javascript
Jquery组件easyUi实现选项卡切换示例
Aug 23 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 Javascript
Vue.js 2.0中select级联下拉框实例
Mar 06 Javascript
angular 基于ng-messages的表单验证实例
May 04 Javascript
使用JavaScript实现链表的数据结构的代码
Aug 02 Javascript
如何用webpack4带你实现一个vue的打包的项目
Jun 20 Javascript
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
快速解决layui弹窗按enter键不停弹窗的问题
Sep 18 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删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
html读出文本文件内容
2007/01/22 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
brook javascript框架介绍
2011/10/10 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
2017/02/23 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
Python3读取文件常用方法实例分析
2015/05/22 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
python 截取 取出一部分的字符串方法
2017/03/01 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
TensorFlow Session会话控制&amp;Variable变量详解
2018/07/30 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
乡镇干部先进事迹材料
2014/02/03 职场文书
幼儿园新年寄语
2014/04/03 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
撤诉书怎么写
2015/05/19 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS