Angular 导航到第一个子级时会触发父路由OnInit
我有一个问题,当我将路由更改为子路由时,父路由的Angular 导航到第一个子级时会触发父路由OnInit,angular,angular-routing,Angular,Angular Routing,我有一个问题,当我将路由更改为子路由时,父路由的OnInit会触发。如果我有3个子项,父项将最多初始化3次(当我第一次导航到这些子项时,每个子项都会初始化) 我知道这是由于我的CustomReuseStragey造成的,但我不知道确切的原因以及如何修复它(我从其他地方复制了CustomReuseStragey) 我能够使用不同的自定义重用策略来解决这个问题 import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrate
OnInit
会触发。如果我有3个子项,父项将最多初始化3次(当我第一次导航到这些子项时,每个子项都会初始化)
我知道这是由于我的CustomReuseStragey
造成的,但我不知道确切的原因以及如何修复它(我从其他地方复制了CustomReuseStragey)
我能够使用不同的自定义重用策略来解决这个问题
import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';
export class CustomReuseStrategy implements RouteReuseStrategy {
public static handlers: { [key: string]: DetachedRouteHandle } = {};
public shouldDetach(route: ActivatedRouteSnapshot): boolean {
return true;
}
public store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {
CustomReuseStrategy.handlers[this.getRouteUrl(route)] = handle;
}
public shouldAttach(route: ActivatedRouteSnapshot): boolean {
return !!CustomReuseStrategy.handlers[this.getRouteUrl(route)];
}
public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {
if (!route.routeConfig) {
return null;
}
return CustomReuseStrategy.handlers[this.getRouteUrl(route)];
}
public shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
return future.routeConfig === curr.routeConfig && JSON.stringify(future.params) === JSON.stringify(curr.params);
}
private getRouteUrl(route: ActivatedRouteSnapshot) {
return route['_routerState'].url.replace(/\//g, '_');
}
}
出于澄清的目的,期望的行为是什么?当路由到子级时,您根本不希望调用父级
OnInit
lifecycle钩子吗?@Narm您是对的。应该调用一次父级OnInit
(加载时调用,但子级加载时不调用)