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 相关文章推荐
使用prototype.js进行异步操作
Feb 07 Javascript
20款超赞的jQuery插件 Web开发人员必备
Feb 26 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
Jan 25 Javascript
js函数获取html中className所在的内容并去除标签
Sep 08 Javascript
js判断当前浏览器类型,判断IE浏览器方法
Jun 02 Javascript
Javascript中for循环语句的几种写法总结对比
Jan 23 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
Apr 07 jQuery
JavaScript全屏和退出全屏事件总结(附代码)
Aug 17 Javascript
微信小程序实现简单表格
Feb 14 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
Jul 09 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
Apr 29 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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
PHP7变量处理机制修改
2021/03/09 PHP
JS随即打乱数组实现代码
2012/12/03 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
Node.js简单入门前传
2017/08/21 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
Python中标准模块importlib详解
2017/04/16 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
python实现自动解数独小程序
2019/01/21 Python
详解python 爬取12306验证码
2019/05/10 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
英语专业毕业生自荐信
2013/10/28 职场文书
建筑个人求职信范文
2014/01/25 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
教师自荐信范文
2015/03/06 职场文书
个人合作协议范本
2015/08/06 职场文书
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
VUE递归树形实现多级列表
2022/07/15 Vue.js