我正在使用 Angular 12,并且我的以下路由重用策略运行良好:
export class RoutingReuseStrategy implements RouteReuseStrategy {
handles: { [key: string]: DetachedRouteHandle } = {};
shouldDetach(route: ActivatedRouteSnapshot): boolean {
return route.data.shouldReuse || false;
}
store(route: ActivatedRouteSnapshot, handle: {}): void {
if (route.data.shouldReuse) {
this.handles[route.routeConfig.path] = handle;
}
}
shouldAttach(route: ActivatedRouteSnapshot): boolean {
return !!route.routeConfig && !!this.handles[route.routeConfig.path];
}
retrieve(route: ActivatedRouteSnapshot): {} {
if (!route.routeConfig) return null;
return this.handles[route.routeConfig.path];
}
shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
return future.data.shouldReuse || false;
}}
在我重用的组件中,我订阅了这样的查询参数:
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.queryParams.subscribe(queryParams => {
// do something with queryParams
});
}
我的问题是,该订阅仅在首次加载组件时触发一次。如果路由再次与新的查询参数一起使用,则 ActivatedRoute 不会更新。
有什么方法可以使用 RouteReuseStrategy 并且仍然能够在重用组件中订阅新的查询参数(或路由参数)?
我确实有一个使用路由器事件订阅的解决方法,它允许访问带有新参数的 URL。但如果有一种方法可以使用 queryParams 订阅,我想我更愿意这样做。