实现思路
- 创建自定义预加载策略类:实现
PreloadingStrategy
接口,该接口只有一个preload
方法。在preload
方法中,决定是否预加载某个模块。可以根据业务需求,比如根据用户当前所处页面、网络状态、模块的重要性等条件来判断。
- 配置预加载策略:在
RouterModule
的forRoot
方法中,将自定义的预加载策略类作为参数传入,替代默认的预加载策略。
关键代码示例
- 创建自定义预加载策略类
import { Injectable } from '@angular/core';
import { PreloadingStrategy, Route } from '@angular/router';
import { Observable, of } from 'rxjs';
@Injectable()
export class CustomPreloadingStrategy implements PreloadingStrategy {
preload(route: Route, load: () => Observable<any>): Observable<any> {
// 这里简单示例根据路由数据中的preload标志来判断是否预加载
if (route.data && route.data['preload']) {
return load();
} else {
return of(null);
}
}
}
- 配置预加载策略
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CustomPreloadingStrategy } from './custom-preloading-strategy';
const routes: Routes = [
{
path: 'lazy-module',
loadChildren: () => import('./lazy-module/lazy-module.module').then(m => m.LazyModuleModule),
data: { preload: true } // 标记该模块需要预加载
},
// 其他路由配置
];
@NgModule({
imports: [RouterModule.forRoot(routes, { preloadingStrategy: CustomPreloadingStrategy })],
exports: [RouterModule]
})
export class AppRoutingModule { }