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
(加载时调用,但子级加载时不调用)