【问题标题】:After I add vuex persist plugin I cannot get store in router添加 vuex persist 插件后,我无法在路由器中存储
【发布时间】:2019-08-14 03:23:06
【问题描述】:

添加 vuex persist 插件后,我无法在路由器中存储。

const vuexPersist = new VuexPersist({
    key: "vuex",
    storage: localStorage
});

const store = new Vuex.Store({
    state: {},
    modules: {
        alertStorage,
        userStorage,
    },
    //plugins: [vuexPersist.plugin] <-- if I comment out this, its working
});

在路由器中:

router.beforeEach((to, from, next) => {
    console.log(userStorage.state._user);
    next();
}

注释掉行时的结果:

如果不是:

加上信息,这就是我的商店的样子:

import {Module, Mutation, VuexModule} from "vuex-module-decorators";
import {UserResponseDto} from "@/common/dto/user-response-dto";
import Utils from "@/common/utils";

@Module
export default class UserStorage extends VuexModule{
     _user: UserResponseDto = {} as UserResponseDto;

    @Mutation
    protected loginUser(user: UserResponseDto) {
        this._user = user;
    }

    @Mutation
    protected logoutUser() {
        this._user = {} as UserResponseDto;
    }

    get isLoggedIn() {
        return !Utils.isEmpty(this._user);
    }

    get user():UserResponseDto{
        return this._user;
    }
}

【问题讨论】:

    标签: typescript vue.js vuex


    【解决方案1】:

    这是正常行为,因为您必须指示它使用当前浏览器windowlocalStorage

    有两种方法可以实现:

    const vuexPersist = new VuexPersist({
        key: "vuex",
        storage: window.localStorage // modified here
    });
    

    或者根本不精确存储:

    const vuexPersist = new VuexPersist({
        key: "vuex"
    });
    

    在后一种情况下,默认存储为:window.localStorage

    在这两种情况下,您都必须将插件注入到 Vuex:

    const store = new Vuex.Store({
        state: {},
        modules: {
            alertStorage,
            userStorage,
        },
        plugins: [vuexPersist.plugin] // Do not comment it out
    });
    

    【讨论】:

    • 不幸的是,这个解决方案不起作用。你提到的两种我都试过了。
    • 是的,我正在使用 Vue.jsTypescript。我还为我的问题添加了附加信息。
    • 好的,vuex-persist 它似乎在 vue.ja 文件 .vue 中工作,但在我的 .ts 文件路由器中却没有。有什么想法吗?
    • 我找到了一个workaorund,但没有这个会更好。 let val = JSON.parse(localStorage.getItem('vuex') as string); let userResponse = val.userStorage._user as UserResponseDto;
    猜你喜欢
    • 2020-12-28
    • 2021-08-10
    • 2020-03-07
    • 2021-12-12
    • 2021-02-12
    • 2012-04-09
    • 2020-04-28
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多