vue.js - 在 router.js 中访问 Vuex 存储时出现异步等待问题
问题描述
我正在尝试访问路由器文件中的 Vuex 存储。我需要根据 store 的 data.length 定义路由。例如,如果 store.data 为空,我只需要 Company List 路由。如果没有,我只需要登录路线。实际上数据不是空数组,但它总是记录为空数组,我怎样才能在没有这个问题的情况下获取商店的数据(异步/等待)?这是我的代码。
import Vue from 'vue';
import Router from 'vue-router';
import store from '@/store';
Vue.use(Router);
let data = [];
async function getData() {
data = await store.dispatch('auth/fetchCompanyList');
}
getData();
console.log('data', data);
//data is always empty array.
let routes = [];
if (data.length === 0) {
routes = [
{
path: '/company-list',
name: 'CompanyList',
component: () => import('../pages/admin/company/List.vue'),
},
];
} else {
routes = [
{
path: '/signin',
name: 'Signin',
component: () => import('../pages/signin.vue'),
},
];
}
console.log('Route: ', routes);
const router = new Router({
mode: 'history',
base: process.env.BASE_URL,
// base: process.env.BASE_URL + '/ui/',
routes,
});
export default router;
解决方案
当您记录它时,数据将为空,因为它没有从您的存储方法中收到答案。你可以使用.then()
来访问 promise 的值。然后,您可以使用可用的功能自由地将更多路由添加到您的路由器addRoutes()
。
一个实现可能如下所示:
import Vue from 'vue';
import Router from 'vue-router';
import store from '@/store';
Vue.use(Router);
const router = new Router({
mode: 'history',
base: process.env.BASE_URL,
// base: process.env.BASE_URL + '/ui/',
routes: [],
});
const getData = async () => {
data = await store.dispatch('auth/fetchCompanyList');
};
const handleData = (data) => {
if (data.length === 0) {
router.addRoutes([
{
path: '/company-list',
name: 'CompanyList',
component: () => import('../pages/admin/company/List.vue'),
},
]);
}else{
router.addRoutes([
{
path: '/signin',
name: 'Signin',
component: () => import('../pages/signin.vue'),
},
])
}
};
getData().then(handleData);
export default router;
推荐阅读
- c# - c#中如何关闭显示器
- python - 溢出错误:(34,'数值结果超出范围')
- javascript - 编辑一组 html 按钮
- git - get rebase --interactive 只显示'noop'并合并所有提交
- amazon-web-services - S3 使用 terraform 存储双向复制
- firebase - 如何从下到上对数据进行排序以在firebase rtdb中以最新的优先方式实现分页?
- sql-server - 使用 ROW_NUMBER() OVER(PARTITION BY... ORDER BY 的三种不同操作修复连接导致查询出现 NULL
- java - 在 Maven 仓库中找不到 spring-boot-thin-layout
- c# - 剑碰撞时间
- content-management-system - 内容丰富:可以在同一组项目中允许引用和本地字段类型吗?