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.
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.
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: