2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > vue解决mintui中使用MessageBox弹窗拦截 移动端多次点击手机的物理返回键 选择确定

vue解决mintui中使用MessageBox弹窗拦截 移动端多次点击手机的物理返回键 选择确定

时间:2020-10-13 21:52:55

相关推荐

vue解决mintui中使用MessageBox弹窗拦截 移动端多次点击手机的物理返回键 选择确定

在vue项目中用到mintUI的MessageBox弹窗,不点击取消或者确定键,之后多次在手机(运用android手机上的物理返回键)上进行页面的回退时(或者通过浏览器回退时),返回的页面并不是上一页的页面(详情页面)(点击一次返回按钮时,显示的页面正确)

具体说明:

点击确定键时执行后退一步的操作,用手机的物理返回键进行返回,可以返回到上一页面(详情页面),但是不点击确定键的话弹窗本身依然显示,这次单次点击后应返回页面的详情页路由,如下图所示:

这次单次点击后应返回页面的详情页路由(不正确),如下图所示:

解决这个问题在弹窗出现时禁止使用物理返回键控制路由的跳转

具体实现:

在vuex内定义一个全局的变量来控制这个路由是否可以返回:

vuex中存放:

​const state = {routerFlag: true}const getters = {routerFlag: state => state.routerFlag}const mutations = {updateRouterFlag (state, update) {state.routerFlag = update}}export default {state,getters,mutations}

使用:

在main.js中的router.beforeEach内添加:

router.beforeEach((to, from, next) => {console.log('to: ', to)console.log('store.getters.routerFlag: ', store.getters.routerFlag)if (!store.getters.routerFlag) {next(false)return}next()})

注意在创建vue实例前写,不然不起作用

放置位置如图所示:

在使用这个弹窗方法的地方添加

this.$mit('updateRouterFlag', false)this.$mit('updateRouterFlag', true)

作为判断控制是否禁止路由返回的依据即可。

具体修改如下:

confirm(点击确认)中调用this.$router.back(),因为main.js中已经执行完成,router.beforeEach已经完成拦截,点击确认按钮后,无法正确返回上一页,所以需要重新调用一次返回,才可以正确的返回详情页面(这里我觉得代码逻辑有些不正确,但是确实解决了我的问题【在有弹框拦截的情况下,多次选择返回,点击确认后,返回的页面不正确】,这个解决方法先记录下来,等以后更深入理解后,再进行修改)

遇到的问题:

在beforeRouteLeave()中,如果不进行next(),直接拦截的话,是不会执行main.js中router.beforeEach()的,这时候多次返回,是不会起拦截作用的

参考:/zuoyiran51/article/details/86749527

vue解决mintui中使用MessageBox弹窗拦截 移动端多次点击手机的物理返回键 选择确定后页面返回不正确问题

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。