序言
路由在切换时需要销毁当前组件,这在大多数情况下是符合预期的。但是有些时候在一些列表 + 详情的结构下,进入详情后再返回列表需要保留之前的列表状态,此时就需要缓存列表路由。
现有方案
1 | // route-reuse.strategy.ts |
1 | // app-routing.module.ts |
1 | // 任意一个页面组件 |
问题
同一父路由 下的子路由之间的跳转会重新初始化 parent component。翻了翻源代码这才找到了答案。
RouteReuseStrategy 抽象类
Provides a way to customize when activated routes get reused. code
1 | export abstract class RouteReuseStrategy { |
官方默认的 ReuseStrategy 如下
1 | /** |
对比发现 shouldReuseRoute 中的判断条件不一样。于是将原有代码做了一些调整
1 | shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean { |
此时同一父路由下的子路由之间的跳转不会再初始化父组件了。