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 相关文章推荐
ExtJs使用总结(非常详细)
Mar 22 Javascript
js函数获取html中className所在的内容并去除标签
Sep 08 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
Jun 23 Javascript
js实现jquery的offset()方法实例
Jan 10 Javascript
JavaScript实现的浮动层框架用法实例分析
Oct 10 Javascript
JQuery DIV 动态隐藏和显示的方法
Jun 23 Javascript
JavaScript中ES6 Babel正确安装过程
Jul 18 Javascript
关于js函数解释(包括内嵌,对象等)
Nov 20 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
Dec 28 Javascript
微信小程序实现按字母排列选择城市功能
Nov 25 Javascript
js实现鼠标拖拽div左右滑动
Jan 15 Javascript
详解Vue的列表渲染
Nov 20 Vue.js
微信小程序 拍照或从相册选取图片上传代码实例
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学习资料汇总与网址
2007/03/16 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
2014/09/01 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
JS实现的抛物线运动效果示例
2018/01/30 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
越南综合购物网站:Lazada越南
2019/06/10 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
黄河象教学反思
2014/02/10 职场文书
文秘应届生求职信
2014/07/05 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
2014年质量工作总结
2014/11/22 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书