vue 动态路由component 传递变量报错问题?

menuList 后台数据返回格式

{
    // 统计分析
    path: '/statistics',
    name: 'Statistics',
    meta:{title: '数据统计'},
    component: 'views/statistics/Statistics'
}

路由里面component 接收的是 @/views/statistics/Statistics 能正常显示页面

67162f4b74219270041e2373d0ee1c5.png
552f63cf03e417586fa7be0b13f96f3.png

如果动态参数,以下三种都会报错,页面空白

let cop = `@/${item.component}`
// item.component = () => import(cop)
// item.component = resolve => require([cop], resolve)
// item.component = Promise.resolve().then(() => require(`@/${item.component}`))

482889518f329551d7e7a85f310bdd8.png
1fc9ebc7ae4634333792782f45c4de5.png

已解决 —— chatGPT 解决方案

1684481131485.png

76691942443d2c4b3a27f3045c4ebb3.png

阅读 2.1k
3 个回答

name为组件页面地址


const lazyComponent = (name) => () => import(`@/${name}.vue`)
或者
//const lazyComponent = (name) => (resolve) => require([`@/${name}.vue`],resolve)
item.component = lazyComponent(item.component)

别用这种动态路由了球球了,页面都没有动态渲染的功能弄个动态路由不是给自己找罪受

动态路由你需要处理的问题只有一个,那就是资源的映射,如果你在代码内不体现import的操作,那么webpack是不会将资源进行打包,你可以参考这个方案

const map={
 login:() => import('login/index')
}
//你存在服务端的map类似于
const serviceMap=[
 { path: '/login', component: 'login', hidden: true }
]
//之后遍历这个map,动态生成asyncRoutes,然后调用vue的addRoutes
并将 component 替换为 map[component]

你目前的方案,我建议直接使用全量路由,然后菜单做v-if的隐藏,再加一个路由拦截其实也就实现了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题