vue 禁止浏览器后退

来源:互联网 发布:java迭代器中数组赋值 编辑:程序博客网 时间:2024/05/21 09:10
需求是:需要某个路由不能通过浏览器返回,同时不影响相互之间的切换

整理一下解决方法 和 使用方法:

1.在路由配置中给这个路由添加meta信息,比如:

{    path: '/home',    component: xxx,    meta: {allowBack: false}}
2.在全局的router.beforeEach 函数里面获取allowBack的状态,同时更新vuex的allowBack的值,如:

let allowBack = true    //    给个默认值trueif (to.meta.allowBack !== undefined) {    allowBack = to.meta.allowBack}if (!allowBack) {      history.pushState(null, null, location.href)}    store.dispatch('updateAppSetting', {    allowBack: allowBack})

这段代码得写在next()的后面,因为写在next()前面location.href并不是to的地址,这点跟vue1.0有点不同
-----更新分割线-----
location.href 获取的仍不是to的地址,所以得根据to的信息来拼起来

3.接下来就是最核心的了,在app.vue的mounted里面写onpopstate事件:

window.onpopstate = () => {    if (!this.allowBack) {    //    这个allowBack 是存在vuex里面的变量        history.go(1)    }}

原文地址: https://segmentfault.com/q/1010000009527093?sort=created