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 相关文章推荐
jQuery封装的获取Url中的Get参数示例
Nov 26 Javascript
Js实现动态添加删除Table行示例
Apr 14 Javascript
基于Angularjs实现分页功能
May 30 Javascript
基于JavaScript实现的希尔排序算法分析
Apr 14 Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
ajax+node+request爬取网络图片的实例(宅男福利)
Aug 28 Javascript
利用Console来Debug的10个高级技巧汇总
Mar 26 Javascript
微信小程序实现循环动画效果
Jul 16 Javascript
javascript和php使用ajax通信传递JSON的实例
Aug 21 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
Jun 18 Javascript
使用javascript解析二维码的三种方式
Nov 11 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
php中文字符截取防乱码
2008/03/28 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
Python标准库之Sys模块使用详解
2015/05/23 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
Python新手学习装饰器
2020/06/04 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
家长会标语
2014/06/24 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
病假证明模板
2015/06/19 职场文书
Java 超详细讲解hashCode方法
2022/04/07 Java/Android