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中 prop() attr()使用详解
May 19 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
Jul 29 Javascript
js实现select二级联动下拉菜单
Apr 17 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
May 12 Javascript
AngularJS教程之MVC体系结构详解
Aug 16 Javascript
easyui combobox开启搜索自动完成功能的实例代码
Nov 08 Javascript
javascript删除html标签函数cIsHTML
Jan 09 Javascript
详解本地Node.js服务器作为api服务器的解决办法
Feb 28 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
May 13 Javascript
Angular6新特性之Angular Material
Dec 28 Javascript
vue v-for 使用问题整理小结
Aug 04 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中使用Oracle数据库(6)
2006/10/09 PHP
PHP set_time_limit(0)长连接的实现分析
2010/03/02 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
Javascript学习笔记1 数据类型
2010/01/11 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
利用JS实现数字增长
2016/07/28 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
Node 代理访问的实现
2019/09/19 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
python装饰器深入学习
2018/04/06 Python
Django中使用Celery的方法示例
2018/11/29 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
Python编程中类与类的关系详解
2019/08/08 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
python 实现视频 图像帧提取
2019/12/10 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
中式婚礼主持词
2014/03/13 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
签约仪式致辞
2015/07/30 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
使用Python解决图表与画布的间距问题
2022/04/11 Python