在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 相关文章推荐
js静态作用域的功能。
Dec 25 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
May 07 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
Jan 25 Javascript
jquery实现键盘左右翻页特效
Apr 30 Javascript
使用bootstrap3开发响应式网站
May 12 Javascript
JavaScript代码实现图片循环滚动效果
Mar 19 Javascript
Boostrap基础教程之JavaScript插件篇
Sep 08 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
Nov 09 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
Aug 24 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
Nov 13 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
May 16 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数组键名技巧小结
2015/02/17 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
jquery图片放大镜效果
2017/06/23 jQuery
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
Unicode和Python的中文处理
2017/03/19 Python
在centos7中分布式部署pyspider
2017/05/03 Python
Python WSGI的深入理解
2018/08/01 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
怎样声明子类
2013/07/02 面试题
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
有个性的自我评价范文
2013/11/15 职场文书
销售顾问岗位职责
2014/02/25 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
水电工程师岗位职责
2015/02/13 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
Python利用folium实现地图可视化
2021/05/23 Python
MySQL 数据类型选择原则
2021/05/27 MySQL