在Vue组件中获取全局的点击事件方法


Posted in Javascript onSeptember 06, 2018

使用场景:

在Vue组件中点击某元素之外的地方移除该元素

在Vue组件中获取全局的点击事件方法

需求:

如上图所示,“用户列表”页面有三个Vue组件组成,分别是“菜单组件”,“导航组件”和“列表组件”。其中“列表组件”中包含一个“下拉菜单”,当我们点击“下拉菜单”以外的区域隐藏下拉菜单。

解决方法一:

出现“下拉菜单”的同时,建一个透明的遮罩层,然后只有“下拉菜单”可以点,点击遮罩层就隐藏。

缺点:z-index层数要控制好,还有就是如果点击其他功能按钮,会失效,因为有遮罩层,导致要点击两次才有效。

解决方法二:

局部监听,给“列表组件”最外层的盒子加个点击事件,隐藏下拉菜单。并且对“下拉菜单”的事件要阻止事件冒泡。

缺点:点击“列表组件”区域有效,点击“菜单组件”和“导航组件”区域无效。

解决方法三(推荐):

第一步:定义Vue全局点击函数

// 定义全局点击函数
Vue.prototype.globalClick = function (callback) {
 document.getElementById('main').onclick = function () {
 callback();
 };
};

tips:

1、参数为点击的回调函数。

2、Vue中通过getElementsByTagName获取不到body节点,还不知道是什么原因。

第二步:在组件中监听全局的点击事件

mounted: function () {
 this.globalClick(this.moreSetupMenuRemove);
}

tips:mounted是Vue生命周期钩子中的DOM渲染完成阶段。

第三步:进行操作

// 移除操作
moreSetupMenuRemove () {
 this.$refs.moreSetupMenu.style.display = 'none';
},

如果有更好的方法,欢迎交流!

以上这篇在Vue组件中获取全局的点击事件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript Cookie 直接浏览网站分网址
Dec 08 Javascript
JS中不为人知的五种声明Number的方式简要概述
Feb 22 Javascript
jQuery div层的放大与缩小简单实现代码
Mar 28 Javascript
IE浏览器下PNG相关功能
Jul 05 Javascript
高性能JavaScript DOM编程(1)
Aug 11 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
Nov 15 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
React学习笔记之高阶组件应用
Jun 02 Javascript
点击按钮弹出模态框的一系列操作代码实例
Mar 29 Javascript
详解vue 2.6 中 slot 的新用法
Jul 09 Javascript
用JS实现选项卡
Mar 23 Javascript
解决新建一个vue项目过程中遇到的问题
Oct 22 Javascript
jQuery实现基本动画效果的方法详解
Sep 06 #jQuery
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 #Javascript
Vue中使用clipboard实现复制功能
Sep 05 #Javascript
vue-cli3.0配置及使用注意事项详解
Sep 05 #Javascript
Vue-cli@3.0 插件系统简析
Sep 05 #Javascript
vue实现点击选中,其他的不选中方法
Sep 05 #Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
Sep 05 #Javascript
You might like
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
ES6新增的math,Number方法
2017/08/06 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
简单了解python 邮件模块的使用方法
2019/07/24 Python
如何使用python进行pdf文件分割
2019/11/11 Python
python的faker库用法
2019/11/28 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
python不相等的两个字符串的 if 条件判断为True详解
2020/03/12 Python
python创建文本文件的简单方法
2020/08/30 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
优秀学生党员先进事迹材料
2014/05/29 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
父亲节感言
2015/08/03 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
深入理解go slice结构
2021/09/15 Golang