vue中监听返回键问题


Posted in Javascript onAugust 28, 2019

问题:在项目中,我们常常有需求,当用户在填写表单时,点击返回的时候,我们希望加一个弹窗,确认离开吗,确认将保存为草稿

解决方案:利用 H5的 pushstate(个人理解为增加页面栈)特性与onpopup事件

分析:pushstate 从该方法名我们可以知道 是增加某种状态,会为history对象的length增加长度, 点击返回键的时候会触发onpopup事件(可以联想到 pop其实是数组删除的最后一个元素,符合  ‘栈' 的思想);

          onpopup触发返回上一页,而 pushstate仅仅是从url上进行了改变,不会校验url的内容,页面不会改变,加入当前页面为 xxx/b.html,此时pushState(null,null,'a.html'),可以发现 url变了,而页面的内容并没有改变,我们可以通过这来造成一种无法返回的假象

实施:  

//注意:Dialog是一款弹窗的插件
mounted: function() {
//当前页面挂载的时候调用 返回键的监听方法
this.listeningBack()
}
 //当页面销毁的时候我们也要将事件监听销毁,以免影响其他内容
 destroyed:function(){
  window.onpopstate = null
},
methods:{
//监听返回键
listeningBack() {
var that = this;//window.onpopstate方法指向window,所以要储存一下当前的vue实例
let route = '上一页';//根据业务逻辑的上一页决定
window.onpopstate = function() {
//将当前页面window.location.href 放入页面栈当中
history.pushState({}, null, window.location.href);
Dialog.alert({
title: '标题',
message: '确认返回吗,你所填写的内容将保存为草稿'
}).then(() => {
that.$router.push({
path:route
})
}).catch(
console.log('取消返回,留在当前页面')
);
}
},

}

总结

以上所述是小编给大家介绍的vue中监听返回键问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
js 表格隔行颜色
Dec 02 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
Javascript基础之数组的使用
May 13 Javascript
判断数组是否包含某个元素的js函数实现方法
May 19 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
微信小程序 canvas API详解及实例代码
Oct 08 Javascript
js实现表单提交后不重新刷新当前页面
Nov 30 Javascript
js回调函数原理与用法案例分析
Mar 04 Javascript
JS 5种遍历对象的方式
Jun 16 Javascript
js实现简单的无缝轮播效果
Sep 05 Javascript
如何利用js在两个html窗口间通信
Apr 27 Javascript
JavaScript实现队列结构过程
Dec 06 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
Aug 28 #Javascript
小程序中this.setData的使用和注意事项
Aug 28 #Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 #Javascript
vue实现标签云效果的方法详解
Aug 28 #Javascript
微信小程序通过js实现瀑布流布局详解
Aug 28 #Javascript
TypeScript类型声明书写详解
Aug 28 #Javascript
vue服务端渲染操作简单入门实例分析
Aug 28 #Javascript
You might like
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
浅谈javascript事件环微任务和宏任务队列原理
2020/09/12 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
python输出指定月份日历的方法
2015/04/23 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
python队列Queue的详解
2019/05/10 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
生日寄语大全
2014/04/08 职场文书
创新社会管理心得体会
2014/09/12 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL
Springboot中如何自动转JSON输出
2022/06/16 Java/Android
MySQL数据库表约束讲解
2022/06/21 MySQL