Vuejs2 如何从vue路由器访问vuex Getter并设置防护?

Vuejs2 如何从vue路由器访问vuex Getter并设置防护?,vuejs2,vuex,vue-router,Vuejs2,Vuex,Vue Router,我正试图与Vue打交道,但我遇到了一些问题: 1:我无法从router/index.js文件访问我的getter。(我可以访问它,但它像函数一样返回,返回函数,我无法调用并获取值) 2:我不能正确地设置守卫。有角的话就容易多了 我做错了什么?有什么建议吗 路由器代码 /*eslint禁用无未定义*/ 从“Vue”导入Vue; 从“vue路由器”导入VueRouter; //从“../store/modules/auth”导入身份验证; 从“vuex”导入{createNamespacedHelp

我正试图与Vue打交道,但我遇到了一些问题:

1:我无法从router/index.js文件访问我的getter。(我可以访问它,但它像函数一样返回,返回函数,我无法调用并获取值)

2:我不能正确地设置守卫。有角的话就容易多了

我做错了什么?有什么建议吗

路由器代码

/*eslint禁用无未定义*/
从“Vue”导入Vue;
从“vue路由器”导入VueRouter;
//从“../store/modules/auth”导入身份验证;
从“vuex”导入{createNamespacedHelpers};
const{mapGetters}=createNamespacedHelpers(“auth”);
//从“../store”导入存储;
Vue.use(VueRouter);
常数路由=[
{
路径:“/”,
姓名:“家”,
组件:()=>import(“../components/Home.vue”),
meta:{requireAuth:true}
},
{
路径:“/users”,
名称:“用户”,
组件:()=>import(“../components/Users/Users.vue”),
meta:{requireAuth:true}
},
{
路径:“/登录”,
姓名:“签名”,
组件:()=>导入(“../components/SignIn/SignIn.vue”),
}
];
常量路由器=新的VueRouter({
模式:“历史”,
base:process.env.base\u URL,
路线
});
路由器.beforeach((到、从、下一个)=>{
const storeGetters={…映射getters(['isAuthenticated','authStatus','test']);
const isUserLoggedIn=storeGetters.isAuthenticated;
if(to.matched.some(record=>record.meta.requireAuth)){
if(isUserLoggedIn){
log('user is authenticated');
到;从;
返回next();
}否则{
log('Access denied!');
下一个({
路径:'/sign',
查询:{重定向:到.fullPath}
});
}
下一个({
路径:'/sign',
查询:{重定向:到.fullPath}
});
}否则{
next();
}
})
导出默认路由器;
Vuex指数

从“Vue”导入Vue;
从“Vuex”导入Vuex;
从“/modules”导入模块
Vue.use(Vuex);
导出默认的新Vuex.Store({
严格:是的,
模块,
声明:{
testState:“状态值”
},
吸气剂:{
测试:state=>state
}
});
验证模块(vuex)

从'@/vue apollo'导入{apolloClient};
从“@/graphql/signIn.gql”导入SignInGQL;
导出默认值{
名称空间:对,
声明:{
令牌:null,
身份验证状态:false
},
吸气剂:{
已验证:(状态)=>{
log('state:',state);
return!!state.token;
},
authStatus:state=>state.authStatus,
测试:state=>state.authStatus
},
行动:{
异步登录({commit,dispatch},formInput){
试一试{
const{data}=await apolloClient.mutate({
突变:SignInGQL,
变量:{…formInput}
})
const{token}=data.signIn;
等待提交('setToken',令牌);
setItem('auth-token',token);
等待调度('setUser',令牌);
}捕获(e){
控制台错误(e)
}
},
异步setUser({commit},令牌){
const encodedPayload=token.split('.')[1];
const{payload}=JSON.parse(atob(encodedPayload));
//TODO:设置用户信息
等待提交('signInUser',有效负载);
}
},
突变:{
setToken(状态,标记){
state.token=token
},
签名用户(状态、用户){
console.log('authStatus:',state.authStatus)
state.authStatus=true
state.user={…user}
console.log('authStatus:',state.authStatus)
},
注销用户(状态){
console.log('dispatched logOutUser')
state.authStatus=“”
state.token=''&&localStorage.removietem('auth-token'))
}
}
}

似乎
createNamespacedHelpers
只是让事情复杂化了。导入存储:


从'@/store'导入存储;//非常感谢你的帮助。我已经认为我在这里不会得到任何帮助。要么这里没有Vue社区,要么根本没有使用此框架。我试过你的方法,似乎对我很有效。我最终可以得到结果,但不是函数本身,它一直都给了我真正的值。如果我有时会问一些关于Vue的问题,我将不胜感激,因为我刚刚开始学习Vue,但显然是文档,我在那里寻找答案,并将“createNamespacedHelpers”作为一个解决方案并没有多大帮助。不客气,很高兴它有所帮助。我认为这里有一个相当大的Vue社区,但是
createNamespacedHelpers
并不经常使用,而且似乎很难从我的测试中获取信息。关于Vue,你能说些什么?它是一个像样的前端框架吗?我真的不喜欢React,希望有一个Angular的替代品,它与ReactVue一样接近,速度也一样快,在我看来,ReactVue是最好的框架。最干净最简单的。正如你所看到的,它们有很多陷阱。但这就是我在文件上能找到的。再次感谢!很多