gpt4 book ai didi

vuejs2 - Vuex 访问 Vue 路由器中的命名空间模块 getter

转载 作者:行者123 更新时间:2023-12-04 13:30:47 26 4
gpt4 key购买 nike

我试图通过检查用户是否经过身份验证来保护我的路线,这是示例路线:

{
path: '/intranet',
component: search,
meta: { requiresAuth: true },
props: {
tax: 'type',
term: 'intranet-post',
name: 'Intranet'
}
},

我正在这样设置 guard :
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {

let authenticated = this.$store.getters['auth/getAuthenticated'];

if (!authenticated) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
} else {
next()
}
})

这是 auth 的 vuex 模块:
import Vue from "vue";

export default {
namespaced: true,
state: {
authenticated: !!localStorage.getItem("token"),
token: localStorage.getItem("token")
},
mutations: {
login: function(state, token){
state.authenticated = true;
state.token = token;
},
logout: function(state){
state.authenticated = false;
state.token = '';
}
},
actions: {
login: function({commit}, token){
localStorage.setItem('token', token);
commit('login', token);
},
logout: function({commit}){
localStorage.removeItem("token");
commit('logout');
}
},
getters: {
getToken: (state) => state.token,
getAuthenticated: (state) => state.authenticated,
}
}

但是,当我尝试访问路由保护中显示的 auth getter 时,我收到一个错误:

Cannot read property 'getters' of undefined



我做错了什么,我该如何解决这个问题?

最佳答案

错误消息指出 this.$store尝试访问 this.$store.getters 时未定义,所以问题似乎是商店没有按照您期望的方式在路由器中初始化或设置。使用 .getters['name/getter'] 访问命名空间的 getter本身是正确的。

按照一些教程,我有 store.js它定义了我的商店,然后我将它导入我的 router.js像这样:

import store from './store'

然后直接用 store访问而不是 this.$store :
let authenticated = store.getters['auth/getAuthenticated'];

我认为问题在于 this.$store自动添加到 Vue-Components,但路由器并不是真正的组件,因此缺少 $store -成员。导入商店可以解决这个问题。

关于vuejs2 - Vuex 访问 Vue 路由器中的命名空间模块 getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46908306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com