OnInit родительского маршрута срабатывает при переходе к первому дочернему элементу - PullRequest
0 голосов
/ 05 сентября 2018

У меня проблема с тем, что при изменении маршрута на дочерний маршрут запускается OnInit родительского маршрута. Если у меня трое детей, родитель будет инициализироваться максимум 3 раза (каждый для детей, когда я впервые перейду к детям).

Я знаю, что это происходит из-за моего CustomReuseStrategy, но я не знаю точно, почему и как это исправить (я скопировал CustomReuseStrategy откуда-то еще)

Песочница вышеуказанной проблемы

1 Ответ

0 голосов
/ 11 сентября 2018

Я смог решить ее, используя другую стратегию повторного использования

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, '_');
  }
}
...