无法读取未定义的属性(读取“$store”)

Posted

技术标签:

【中文标题】无法读取未定义的属性(读取“$store”)【英文标题】:Cannot read properties of undefined (reading '$store') 【发布时间】:2021-11-15 07:05:46 【问题描述】:

您好,我收到此错误: 这是我的路由器(index.js)


  path: '/',
  name: 'login',
  component: () => import( /* webpackChunkName: "hours" */ '../views/login.vue'),
  meta: 
    hideNavbar: true,
  ,
  beforeEnter: (to, from, next) => 
    if (this.$store.state.authenticated.admin === true) 
      next('/home');
     else 
      next(false);
    
  

在上面的代码中,我正在努力导航到主页...收到此错误。 这里`TypeError:无法读取未定义的属性(读取'$store')

【问题讨论】:

谁能帮帮我 你在什么地方混店吗? 这能回答你的问题吗? Accessing Vuex state when defining Vue-Router routes 【参考方案1】:

在 vue 路由器内部,您没有 vue 实例。因此无法访问this.$store.state。为了访问您的商店,您需要将 vuex 包含到路由器中。

import store from '@/store/index.js';

然后要从存储中调用数据,您将调用我们刚刚导入的存储变量。例如

if(!store.state.user)
 next('/401');

对于你的情况,它看起来像这样:

import store from '@/store/index.js';


  path: '/',
  name: 'login',
  component: () => import( /* webpackChunkName: "hours" */ '../views/login.vue'),
  meta: 
    hideNavbar: true,
  ,
  beforeEnter: (to, from, next) => 
    if (store.state.authenticated.admin === true) 
      next('/home');
     else 
      next(false);
    
  

我建议也看看这个答案: Accessing Vuex store in Router

【讨论】:

【参考方案2】:

@MaseehaTasneem 您可以从 next() 函数中访问内部结构,如下所示。 试试下面的,看看你有什么可用的。你也许可以做类似的事情,

beforeRouteEnter(to, from, next) 
 next(vm => 
   console.log("vue model", vm)
   
   if (vm.$store.state.authenticated.admin === true) 
     return '/home'
   

   return false
 ) 

【讨论】:

以上是关于无法读取未定义的属性(读取“$store”)的主要内容,如果未能解决你的问题,请参考以下文章

角度ngrx存储错误无法读取未定义的属性“计划”

TypeError:无法读取未定义的属性“提交”

错误::未捕获(承诺中)类型错误:无法读取未定义的属性“内容”

反应笑话单元测试用例TypeError:无法读取未定义的属性'then'

ExtJS 组合框错误:无法读取未定义的属性“存储”

[Vue 警告]:观察者“childItems”的回调错误:“TypeError:无法读取未定义的属性‘标签’”