我已使用 webpack 的代码拆分功能将我的应用程序拆分为多个块,以便在用户访问我的网页时不会下载整个应用程序包。
某些路由所需的块可能相当大,并且可能需要花费大量时间才能下载。这很好,除非用户在单击内部链接时不知道页面实际上正在加载,因此我需要以某种方式显示加载动画或其他内容。
我的路由器是这样配置的:
[
{
path: '/',
component: () => import(/* webpackChunkName: 'landing' */ './landing.vue'),
},
{
path: '/foo',
component: () => import(/* webpackChunkName: 'main' */ './foo.vue'),
},
{
path: '/bar',
component: () => import(/* webpackChunkName: 'main' */ './bar.vue'),
},
]
Vue.js 指南中的 高级异步组件 展示了如何在解析组件时显示特定的“正在加载”组件——这正是我所需要的,但它也说:
请注意,当在 vue-router 中用作路由组件时,这些属性将被忽略,因为异步组件会在路由导航发生之前预先解析。
我怎样才能在 vue-router 中实现这个?如果这不可能,那么延迟加载的组件对我来说几乎毫无用处,因为它会给用户带来糟糕的体验。
原文由 Decade Moon 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用导航守卫来激活/停用显示/隐藏加载组件的加载状态:
如果你想使用像“nprogress”这样的东西,你可以这样做:
http://jsfiddle.net/xgrjzsup/2669/
或者,如果你想就地展示一些东西:
http://jsfiddle.net/h4x8ebye/1/
然后在模板中:
这也可以很容易地封装在一个非常小的组件中,而不是使用
$root
组件来加载状态。