angular路由缓存
路由缓存,input输入状态, 下拉框选中状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| import {RouteReuseStrategy, DefaultUrlSerializer, ActivatedRouteSnapshot, DetachedRouteHandle} from '@angular/router';
export class CustomReuseStrategy implements RouteReuseStrategy {
public handlers: { [key: string]: DetachedRouteHandle } = {};
表示对路由允许复用 shouldDetach(route: ActivatedRouteSnapshot): boolean { 默认对所有路由复用 可通过给路由配置项增加data: { keep: true }来进行选择性使用,代码如下 如果是懒加载路由需要在生命组件的位置进行配置 if (!route.data.keep) { return false; } return true; }
当路由离开时会触发。按path作为key存储路由快照&组件当前实例对象 store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void { this.handlers[route.routeConfig.path] = handle; }
若path在缓存中有的都认为允许还原路由 shouldAttach(route: ActivatedRouteSnapshot): boolean { return !!route.routeConfig && !!this.handlers[route.routeConfig.path]; }
从缓存中获取快照,若无则返回null retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle { if (!route.routeConfig) return null; if (route.routeConfig.loadChildren) return null; 在loadChildren路径上通过修改自定义RouteReuseStrategy中的检索函数时从不检索分离的路由。 return this.handlers[route.routeConfig.path]; }
进入路由触发,判断是否同一路由 shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean { return future.routeConfig === current.routeConfig; } }
|
将以上代码引入到app.module.ts文件的providers: [{ provide: RouteReuseStrategy, useClass: AppRoutingCache }]