路由预加载:在应用启动后,会在后台预先加载某个特征模块。
>[danger] CanLoad路由守卫会阻塞预加载,因此不要在使用CanLoad路由守卫的模块中使用预加载。
## 实现预加载
一、预加载所有特征模块
> 要为所有惰性加载模块启用预加载功能,请从 Angular 的路由模块中导入 PreloadAllModules。
> RouterModule.forRoot 方法的第二个参数接受一个附加配置选项对象。 preloadingStrategy 就是其中之一。 把 PreloadAllModules 添加到 forRoot 调用中:
```
RouterModule.forRoot(
appRoutes,
{
enableTracing: true, // <-- debugging purposes only
preloadingStrategy: PreloadAllModules //添加配置项实现预加载
}
)
```
二、使用自定义的预加载策略
>[info] 预加载所有的特征模块显然不够灵活,通过使用自定义预加载策略实现某个特征模块实现预加载。
1.创建一个服务实现自定义预加载
> 在CLI输入命令:ng generate service selective-preloading-strategy
>
输入命令后创建的服务`src/app/selective-preloading-strategy.service.ts`
```
import { Injectable } from '@angular/core';
import { PreloadingStrategy, Route } from '@angular/router';
import { Observable, of } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class SelectivePreloadingStrategyService implements PreloadingStrategy {
preloadedModules: string[] = [];
preload(route: Route, load: () => Observable<any>): Observable<any> {
if (route.data && route.data['preload']) {
//将路由路径添加到预加载的模块数组中。
this.preloadedModules.push(route.path);
return load();
} else {
return of(null);
}
}
}
```
2.在路由配置中添加预加载
```
{
path: 'crisis-center',
loadChildren: './crisis-center/crisis-center.module#CrisisCenterModule',
data: { preload: true } //路由预加载
},
```
- 目录结构
- 架构
- 指令
- 数据绑定
- 结构性指令
- 属性型指令
- 自定义指令
- 模板引用变量
- 属性绑定
- 事件绑定
- 组件
- 组件交互
- 管道
- 自定义管道
- 动态组件
- 变量检测机制
- 组件生命周期
- 路由
- 路由配置
- 路由导航
- 路由传值
- 父子路由
- 路由事件
- 顶级路由和特征路由
- 多重路由
- 路由守卫
- 路由守卫-简单理解
- 路由惰性加载
- 路由预加载
- 路由动画
- 网络请求
- GET请求
- POST请求
- JSOP请求
- 封装的http请求
- http拦截器
- 表单
- 响应式表单
- 驱动式表单
- CLI命令
- 启动应用
- 创建项目
- 创建组件
- 创建服务
- 创建路由守卫
- 创建特征模块
- 创建自定义指令
- 创建自定义管道
- 相关概念
- 急性加载
- 惰性加载
- 特征模块
- 常见问题
- 全局的Angular CLI大于本地的Angular CLI
- 包体优化