多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 一:异步加载组件 我们开始了解异步加载组件之前,我们先来了解通常是如何加载组件的。 为此,我创建了一个`Tooltip.vue`组件: ~~~ // Tooltip.vue <template> <h1>Hi from Tooltip!</h2> </template> ~~~ 这里没有什么特别之处,它就是一个简单的组件。我们可以通过局部注册,导入`Tooltip`组件并将其添加到`components`选项中,这样就可以在另一个组件中使用它。比如,在`App.vue`中使用它: ~~~ // App.vue <template> <div id="app"> <Tooltip /> </div> </template> <script> import Tooltip from "./components/Tooltip" export default { name: "App", components: { Tooltip } }; </script> ~~~ 只要`App`被导入,就可以在初始加载时,`Tooltip`组件就会被导入、使用和加载。但往往有一些组件并不是要立即加载的组件,而是在需要时才加载。 > 我们可以应用异步加载和代码拆分来改进它。异步加载是在稍后的阶段加载某些内容的技术。虽然代码拆分是将一段代码拆分到一个单独的文件(称为**chunk**)中,以便减少应用程序的初始包,从而减轻初始加载。 在Vue中异步加载组件与在封装的函数中动态导入组件一样容易。我们可以像下面这样异步加载`Tooltip`组件: ~~~ export default { components: { Tooltip: () => import('./components/Tooltip') } } ~~~ 使用`() => import('./components/Tooltip')`。即可实现异步加载Tooltip组件,当需要时才会加载Tooltip组件,而不是一开始就加载Tooltip组件。 ## 二:处理加载状态 这里的异步组件工厂函数也可以返回一个如下格式的对象: ~~~ const AsyncComponent = () => ({ // 需要加载的组件 (应该是一个 `Promise` 对象) component: import('./MyComponent.vue'), // 异步组件加载时使用的组件,加载动画 loading: LoadingComponent, // 加载失败时使用的组件 error: ErrorComponent, // 展示加载时组件的延时时间。默认值是 200 (毫秒),超过200ms显示加载动画组件 delay: 200, // 如果提供了超时时间且组件加载也超时了, // 则使用加载失败时使用的组件。默认值是:`Infinity` timeout: 3000 }) ~~~