// 在此处进行配置全局的路由守卫(全局前置钩子)
// 目的是:判断当前用户中本地存储是否有token,使用户在登录之前,只能访问到/login页面,其他的页面是访问不到的。
router.beforeEach((to, from, next) => {
    // to 即将进入的路由
    // from 在哪个路由进入的
    // next 放行
    console.log(to); //打印的是页面要跳转到的路由,例如:它下面的path:为"/login"
    let token = localStorage.getItem("token") || ""; //在本地存储中获取token
    if (token) {
        //判断是否有token
        next();
    } else {
        //在没有token的前提下,to下面的path是否为/login,如果不是则页面跳转到登录页面
        if (to.path == "/login") {
            next();
        } else {
            next({path: "/login"}); //跳转页面到login页
        }
    }
});

在main中直接放入这段代码,不起作用,这时候需要将new Vue放在main.js最后即:

// 在此处进行配置全局的路由守卫(全局前置钩子)
// 目的是:判断当前用户中本地存储是否有token,使用户在登录之前,只能访问到/login页面,其他的页面是访问不到的。
router.beforeEach((to, from, next) => {
    // to 即将进入的路由
    // from 在哪个路由进入的
    // next 放行
    console.log(to); //打印的是页面要跳转到的路由,例如:它下面的path:为"/login"
    let token = localStorage.getItem("token") || ""; //在本地存储中获取token
    if (token) {
        //判断是否有token
        next();
    } else {
        //在没有token的前提下,to下面的path是否为/login,如果不是则页面跳转到登录页面
        if (to.path == "/login") {
            next();
        } else {
            next({path: "/login"}); //跳转页面到login页
        }
    }
});

new Vue({
    el: '#app',
    router,
    store,
    render: h => h(App),
    beforeCreate() {
        Vue.prototype.$bus = this;
    }
})

问题解决。

Logo

Vue社区为您提供最前沿的新闻资讯和知识内容

更多推荐