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和ajax的关系详细介绍
Nov 29 Javascript
二叉树的非递归后序遍历算法实例详解
Feb 07 Javascript
RequireJS多页面应用实例分析
Jun 29 Javascript
文件上传插件SWFUpload的使用指南
Nov 29 Javascript
vue.js异步上传文件前后端实现代码
Aug 22 Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 Javascript
使用express搭建一个简单的查询服务器的方法
Feb 09 Javascript
解决jquery有正确返回值但不执行success函数的问题
Aug 20 jQuery
vue实现的树形结构加多选框示例
Feb 02 Javascript
js实现查询商品案例
Jul 22 Javascript
详解nginx配置vue h5 history去除#号
Nov 09 Javascript
node中短信api实现验证码登录的示例代码
Jan 20 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 函数使用方法与函数定义方法
2010/05/09 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
php中的静态变量的基本用法
2014/03/20 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
php中通用的excel导出方法实例
2017/12/30 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
JavaScript数组的5种迭代方法
2017/09/29 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
vuex入门最详细整理
2020/03/04 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
python基础教程之面向对象的一些概念
2014/08/29 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
python中的列表与元组的使用
2019/08/08 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
幼教毕业生自我鉴定
2014/01/12 职场文书
吨的认识教学反思
2014/04/27 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
清明节主题班会
2015/08/14 职场文书