动态路由 addRoute后首页不显示原因

发布于 2022-09-12 23:22:44 字数 1000 浏览 26 评论 0

思路

1、首先获取后台返回的路由表如图结构
image.png
然后保存在 state里。
在permission里触发,然后在main里引入。代码如下所示

前端解析后的路由

首页
image.png

其他页面
image.png

存在问题

添加路由成功后首页不显示,dom没有渲染

main.js 入口文件引入了 动态路由的方法

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
// permission文件为添加动态路由方法
import './utils/permission'

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

permission.js 部分代码

import store from '@/store'
import router from '@/router'
async function getRoute() {
  await store.dispatch('getRoutesList')

  const routeList = store.getters.routesList
  routeList.forEach(item => {
    router.addRoute('HomePage', item)
  })
}
getRoute()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你与昨日 2022-09-19 23:22:44

查看route接受的类型会发现其接受一个同步或者异步组件组件,而你你component类型为string

import { Component } from 'vue'
export type Lazy<T> = () => Promise<T>
export type RouteComponent = Component
export type RawRouteComponent = RouteComponent | Lazy<RouteComponent>

//addRoute参数类型
export interface RouteRecordSingleView extends _RouteRecordBase {
  component: RawRouteComponent
  //...
}

所以要解决这个问题你可以尝试

import CompB from '组件b的地址'
const components = {
  //异步组件
  a: () => require('组件a的地址'),
  //同步组件
  b: CompB
}

async function getRoute() {
  await store.dispatch('getRoutesList')

  const routeList = store.getters.routesList
  routeList.forEach(route => {
    //获取对应的component
    route.component =components[route.component]
  })
  routeList.forEach(item => {
    router.addRoute('HomePage', item)
  })
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文