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 相关文章推荐
JavaScript 轻松搞定快捷留言功能 只需一行代码
Apr 01 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
Jul 07 Javascript
利用js实现遮罩以及弹出可移动登录窗口
Jul 08 Javascript
jquery ajax 简单范例(界面+后台)
Nov 19 Javascript
JQuery调用WebServices的方法和4个实例
May 06 Javascript
javascript实现的固定位置悬浮窗口实例
Apr 30 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
Apr 04 Javascript
vue实现分页组件
Jun 16 Javascript
微信小程序开发的基本流程步骤
Jan 31 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
Mar 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 面向对象 final类与final方法
2010/05/05 PHP
javascript 面向对象的JavaScript类
2010/05/04 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
js实现按一下删除键删除整个单词附demo
2014/09/05 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
python time模块用法实例详解
2014/09/11 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
python制作mysql数据迁移脚本
2019/01/01 Python
Python对象与引用的介绍
2019/01/24 Python
举例讲解Python常用模块
2019/03/08 Python
Django实现跨域的2种方法
2019/07/31 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
绿色环保演讲稿
2014/05/10 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
运动会演讲稿200字
2014/08/25 职场文书
优秀党员先进材料
2014/12/18 职场文书
初三英语教学计划
2015/01/23 职场文书
北京颐和园导游词
2015/01/30 职场文书
入学证明
2015/06/23 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
MySQL 常见存储引擎的优劣
2021/06/02 MySQL