详解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 23 Javascript
JavaScript toFixed() 方法
Apr 15 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
jquery图片上下tab切换效果
Mar 18 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
JavaScript中的函数嵌套使用
Jun 04 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
Oct 15 Javascript
js实现移动端导航点击自动滑动效果
Jul 18 Javascript
JavaScript判断浏览器和hack滚动条的写法
Jul 23 Javascript
jquery animate动画持续运动的实例
Nov 29 jQuery
js实现倒计时器自定义时间和暂停
Feb 25 Javascript
layui 实现表单和文件上传一起传到后台的例子
Sep 16 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中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
更改localhost为其他名字的方法
2014/02/10 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
js 通用订单代码
2013/12/23 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
深入理解Python中各种方法的运作原理
2015/06/15 Python
python删除列表内容
2015/08/04 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
硕士研究生自我鉴定范文
2013/12/27 职场文书
水电工岗位职责
2014/02/12 职场文书
幼儿生日活动方案
2014/08/27 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
布达拉宫的导游词
2015/02/02 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
国富论读书笔记
2015/06/26 职场文书
区域销售大会开幕词
2016/03/04 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
redis实现的四种常见限流策略
2021/06/18 Redis