内容简介:需求是这样的:用户在编辑页以及新增页面时,如果用户手动要跳转到其它页面,就出来一个弹窗提示用户巴拉巴拉。。。然后,使用vue的 beforeRouteLeave 路由守卫可以对一些路由操作进行跳转前提示,但是如果用户点了浏览器的后退按钮,那这个路由守卫基本没用了啊,那个弹窗就闪了一下就消失了,路由直接改变,但是页面不刷新(写这篇文章时,我在想,可能我的路由有问题,不然为什么路由变了,但是页面不刷新?)下面是代码,在App.vue里面添加:
需求是这样的:用户在编辑页以及新增页面时,如果用户手动要跳转到其它页面,就出来一个弹窗提示用户巴拉巴拉。。。
然后,使用vue的 beforeRouteLeave 路由守卫可以对一些路由操作进行跳转前提示,但是如果用户点了浏览器的后退按钮,那这个路由守卫基本没用了啊,那个弹窗就闪了一下就消失了,路由直接改变,但是页面不刷新(写这篇文章时,我在想,可能我的路由有问题,不然为什么路由变了,但是页面不刷新?)
下面是代码,在App.vue里面添加:
mounted () { if (window.history && window.history.pushState) { history.pushState(null, null, document.URL) window.addEventListener('popstate', this.goBack, false) } }, destroyed () { window.removeEventListener('popstate', this.goBack, false) }, methods: { goBack () { // 该事件仅在浏览器后退按钮被点击时触发 let needCofirmRouter = ['/addPro'] console.log(document.URL.split('#')[1]) history.pushState(null, null, null) if (needCofirmRouter.indexOf(document.URL.split('#')[1]) > -1) { this.$confirm('请确认数据已保存,页面跳转后已填写的数据会被清空,是否继续跳转?', '提示', { confirmButtonText: '是', cancelButtonText: '否', type: 'warning' }).then(() => { // 这里不可以使用back,go(-1)等方法,不然会再次触发该事件进入死循环 // this.$router.go(-1) }).catch((ms) => { }) } } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- vue router路由自定义后退事件,并通知下个路由为后退
- jquerymobile后退按钮未显示在标题上
- vue路由里前进后退的那些事儿
- Vue.js轻松实现页面后退时,还原滚动位置
- 无服务器计算:前进一步,后退两步
- Vue scrollBehavior 滚动行为,实现后退页面显示在上次浏览的位置
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。