关于vue-rouer addRoutes问题

发布于 2022-09-12 04:29:50 字数 1331 浏览 15 评论 0

main.js:

import Vue from 'vue'
import App from './App.vue'
import router, { initLayout } from './router'
import store from './store'

require('../mock/index')

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

router.js

export async function initLayout () {
  await axios.get('http://localhost/layout').then((res) => {
    let path = '@' + res.data[0].component
    // res.data[0].component = () => import(path)
    res.data[0].component = Promise.resolve(import(path))
    router.addRoutes([...res.data])
  })
}

mock.js

export default Mock.mock('http://localhost/layout', [{
  path: '/about',
  name: 'About',
  // route level code-splitting
  // this generates a separate chunk (about.[hash].js) for this route
  // which is lazy-loaded when the route is visited.
  component: '/views/About.vue'
}])

mock.js文件拦截了对于http://localhost/layout的请求,在main.js执行initLayout时,获取到了对应路由然后import在addRoutes。

为什么浏览器会提示 Error: Cannot find module '@/views/About.vue'

这个怎么解决啊???

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

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

发布评论

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

评论(2

抚你发端 2022-09-19 04:29:50

你这写法很迷幻呀
按你的逻辑这样应该就可以了

router.js

export function initLayout () {
  return axios.get('http://localhost/layout').then((res) => {
    let path = '@' + res.data[0].component
    // res.data[0].component = () => import(path)
    res.data[0].component = Promise.resolve(import(path))
    router.addRoutes([...res.data])
  })
}

main.js

initLayout().then(() => {
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app')
})
倚栏听风 2022-09-19 04:29:50

component: () => import(path)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文