【问题标题】:vue.js lifecycle and page refresh not working as expectedvue.js 生命周期和页面刷新未按预期工作
【发布时间】:2017-06-15 09:28:30
【问题描述】:

即使刷新页面或在浏览器的地址栏中输入链接,我也需要用户保持登录状态。

我在 store 中创建了一些方法来保存和加载用户数据到本地存储。

main.js 我在 created 钩子中加载我需要的数据,如下所示:

new Vue({
    el: '#app',
    router,
    store,
    render: h => h(App),
    created() {
        this.$store.dispatch('loadUser');
        const user = this.$store.getters.getUser;
        console.log(`VUE app created. Logged-in user: ${user.username}`);
    }
});

routes.js 我有一个 beforeEnter 钩子

path: '/account',
    component: Account,
    beforeEnter: (to,from,next) => {
        const user = Store.getters.getUser;
        console.log(`Should go to /account, user is ${user.username}`);
        if (!user.username) {
            next('/');
        } else {
            next();
        }
    }

我希望 vue 应用程序创建在路由器方法之前运行,但事实并非如此。当我刷新 /account 页面时,首先调用路由器 beforeEnter 钩子,然后调用应用程序创建。所以我的用户是未知的,而不是刷新 /account 页面,我被重定向到带有登录屏幕的根页面。

当用户之前登录并且他的凭据(JWT 令牌)在本地存储中时,我如何获得预期/想要的行为,页面刷新将转到请求的页面而不是被重定向,为什么是路由器方法在 vue created 钩子之前调用?

我的 vue.js 版本是 2.8.2

【问题讨论】:

    标签: javascript vuejs2


    【解决方案1】:

    您不必在created 中发送您的操作。在你到达你的路由器之前调度它。

    store.dispatch('loadUser')
    // create or import router
    // create Vue
    

    【讨论】:

    • 这解决了我的问题。谢谢。现在我明白了。在 main.js 中,路由器是在创建 vue 应用程序之前创建的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多