web-dev-qa-db-fra.com

Comment activer RouteReuseStrategy uniquement pour des itinéraires spécifiques

Existe-t-il un moyen d'implémenter RouteReuseStrategy uniquement pour des routes spécifiques?

Signifiant chaque route avec des enfants, obtenant sa propre implémentation personnalisée de RouteReuseStrategy, et dont les méthodes ne se déclenchent que lorsqu'une route dans un 'arbre' spécifique est activée.

J'utilise actuellement le code de this answer, mais je veux le développer avec la logique ci-dessus si possible.

10
Thodoris

Créer une stratégie de réutilisation d'itinéraire personnalisée

import { RouteReuseStrategy, ActivatedRouteSnapshot, DetachedRouteHandle } from "@angular/router";

export class CustomRouteReuseStategy implements RouteReuseStrategy {

  handlers: { [key: string]: DetachedRouteHandle } = {};

  shouldDetach(route: ActivatedRouteSnapshot): boolean {
    return route.data.shouldReuse || false;
  }

  store(route: ActivatedRouteSnapshot, handle: {}): void {
    if (route.data.shouldReuse) {
      this.handlers[route.routeConfig.path] = handle;
    }
  }

  shouldAttach(route: ActivatedRouteSnapshot): boolean {
    return !!route.routeConfig && !!this.handlers[route.routeConfig.path];
  }

  retrieve(route: ActivatedRouteSnapshot): {} {
    if (!route.routeConfig) return null;
    return this.handlers[route.routeConfig.path];
  }

  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
    return future.data.shouldReuse || false;
  }

}

Dans votre module de routeur, implémentez la nouvelle stratégie dans le tableau providers:

providers: [
  { provide: RouteReuseStrategy, useClass: CustomRouteReuseStategy },
  ...
]

Ensuite, déclarez la route souhaitée avec une propriété de données 'shouldReuse' définie sur true

{ path: 'myPath', component: MyComponent, data: { shouldReuse: true } },

Seuls les itinéraires avec la propriété de données shouldReuse définie sur true seront réutilisés.

19
Ploppy

Oui, vous pouvez le faire en écrivant votre propre RouteReuseStrategy (CustomReuseStrategy).

Pour les routes de liste noire ou blanche, vous pouvez rechercher une propriété de données que vous pouvez définir dans le module de routeur sous la route, puis choisir d'attacher le composant (pour le réutiliser plus tard), ou non.

Liens utiles pour vous aider à démarrer:

0
Jmsdb