在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 相关文章推荐
基于jQuery的树控件实现代码(asp.net+json)
Jul 11 Javascript
Google AJAX 搜索 API实现代码
Nov 17 Javascript
jquery操作 iframe的方法
Dec 03 Javascript
javascript消除window.close()的提示窗口
May 20 Javascript
JavaScript实现一个空中避难的小游戏
Jun 06 Javascript
通过示例彻底搞懂js闭包
Aug 10 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
Mar 28 jQuery
vue动态绑定组件子父组件多表单验证功能的实现代码
May 14 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
Apr 29 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
May 03 Javascript
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
前端vue如何使用高德地图
Nov 05 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 cout<<的一点看法
2010/01/24 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
Python实现基于HTTP文件传输实例
2014/11/08 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
python将音频进行变速的操作方法
2020/04/08 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
大学毕业寄语大全
2014/04/10 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
家长会主持词开场白
2015/05/29 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python