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 TextArea的选中区域处理
Dec 28 Javascript
jquery ajax return没有返回值的解决方法
Oct 20 Javascript
jQuery在html有效在jsp无效的原因及解决方法
Aug 02 Javascript
Seajs的学习笔记
Mar 04 Javascript
JS中的form.submit()不能提交表单的错误原因
Oct 08 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
JS实现带提示的星级评分效果完整实例
Oct 30 Javascript
在React框架中实现一些AngularJS中ng指令的例子
Mar 06 Javascript
Node.js与MySQL交互操作及其注意事项
Oct 05 Javascript
获取当前按钮或者html的ID名称实例(推荐)
Jun 23 Javascript
浅谈React和Redux的连接react-redux
Dec 04 Javascript
一种angular的方法级的缓存注解(装饰器)
Mar 13 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获取MSN好友列表类的实现代码
2013/06/23 PHP
jqgrid 简单学习笔记
2011/05/03 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
Vue的生命周期操作示例
2019/09/17 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
python中append实例用法总结
2019/07/30 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
创业计划书六个要素
2013/12/26 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
家长会学生演讲稿
2014/04/26 职场文书
股票投资建议书
2014/05/19 职场文书
机电系毕业生求职信
2014/07/11 职场文书
档案工作汇报材料
2014/08/21 职场文书
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android