当定义为 lambda 时,路由的默认 vue-cli 延迟加载代码不起作用
Default vue-cli lazy load code for route does not work when defined as lambda
我使用 vue-cli
构建了一个新的 Typescript 项目并指定它应该包括 vue-router
.
这会自动生成一个 router/index.ts
的路由器配置,如下所示:
const routes: Array<RouteConfig> = [
{
path: '/',
name: 'Home',
component: Home,
},
{
path: '/about',
name: 'About',
component: () => { import(/* webpackChunkName: "about" */ '../views/About.vue') },
}
]
这个文件编译得很好,正如人们所期望的那样。但是,当我尝试使用 <router-link>
调用路由时,“关于”页面不会呈现。我可以确认正在调用路由,因为如果我将 console.log('x')
添加到上面的 import lambda 中,我会在控制台中看到 'x' 但永远不会调用 About 组件构造函数并且不会调用 About 内容渲染。
但是,如果我按如下方式调整 index.ts
(根据 docs),那么路线会正常工作并显示视图:
const AboutRoute = () => import('../views/About.vue')
const routes: Array<RouteConfig> = [
{
path: '/',
name: 'Home',
component: Home,
},
{
path: '/about',
name: 'About',
component: AboutRoute,
}
]
任何人都可以解释为什么第二个版本有效,但第一个版本无效,因为它们看起来与我相同。
谢谢
伊恩
您的第一个解决方案不起作用,因为它没有return导入。
在 Javscript 中,当您向函数添加方括号 { }
时,它不会自动将结果 return,您需要自己添加 return
单词。所以要么不加括号要么加 return
:
方法一:
component: () => {
return import(
/* webpackChunkName: "about" */
'../views/About.vue'
)
}
方法二:
component: () => import(
/* webpackChunkName: "about" */
'../views/About.vue'
)
我使用 vue-cli
构建了一个新的 Typescript 项目并指定它应该包括 vue-router
.
这会自动生成一个 router/index.ts
的路由器配置,如下所示:
const routes: Array<RouteConfig> = [
{
path: '/',
name: 'Home',
component: Home,
},
{
path: '/about',
name: 'About',
component: () => { import(/* webpackChunkName: "about" */ '../views/About.vue') },
}
]
这个文件编译得很好,正如人们所期望的那样。但是,当我尝试使用 <router-link>
调用路由时,“关于”页面不会呈现。我可以确认正在调用路由,因为如果我将 console.log('x')
添加到上面的 import lambda 中,我会在控制台中看到 'x' 但永远不会调用 About 组件构造函数并且不会调用 About 内容渲染。
但是,如果我按如下方式调整 index.ts
(根据 docs),那么路线会正常工作并显示视图:
const AboutRoute = () => import('../views/About.vue')
const routes: Array<RouteConfig> = [
{
path: '/',
name: 'Home',
component: Home,
},
{
path: '/about',
name: 'About',
component: AboutRoute,
}
]
任何人都可以解释为什么第二个版本有效,但第一个版本无效,因为它们看起来与我相同。
谢谢 伊恩
您的第一个解决方案不起作用,因为它没有return导入。
在 Javscript 中,当您向函数添加方括号 { }
时,它不会自动将结果 return,您需要自己添加 return
单词。所以要么不加括号要么加 return
:
方法一:
component: () => {
return import(
/* webpackChunkName: "about" */
'../views/About.vue'
)
}
方法二:
component: () => import(
/* webpackChunkName: "about" */
'../views/About.vue'
)