web-dev-qa-db-fra.com

Le routeur Angular2 2.0.0 ne recharge pas les composants lorsque la même URL est chargée avec des paramètres différents?

Je l'ai dans mon fichier .routing.ts

export const routing = RouterModule.forChild([
{
    path: 'page/:id',
    component: PageComponent
}]);

Mon fichier PageComponent vérifie le paramètre id et charge les données en conséquence. Dans les versions précédentes du routeur, si je passais de/page/4 à/page/25, la page se "rechargerait" et les composants se mettraient à jour.

Maintenant, lorsque j'essaie de naviguer vers/page/X où X est l'ID, il ne se charge que la première fois, puis l'URL change, mais les composants ne se "rechargent" plus.

Y a-t-il quelque chose qui doit être transmis pour forcer mes composants à se recharger et à appeler l'événement ngOnInit?

12
Gillardo

mise à jour 2

Cette réponse n'est valable que pour une version de routeur abandonnée depuis longtemps.

Voir https://angular.io/api/router/RouteReuseStrategy pour savoir comment le faire dans le routeur actuel.

mise à jour 1

C'est maintenant corrigé (Angular 2.3) pour le nouveau routeur par https://github.com/angular/angular/pull/13124 qui permet de fournir une stratégie de réutilisation personnalisée.

Pour un exemple, voir également https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routereusestrategy.aspx

original

https://github.com/angular/angular/issues/9811

C'est un problème connu. Actuellement, il n'y a aucun moyen de faire recréer le composant par le routeur lors de changements de route uniquement paramétrés.

Ils ont discuté des plans pour mettre en œuvre éventuellement certaines stratégies de réutilisation.

Vous pouvez vous abonner aux modifications de paramètres et y exécuter votre code au lieu de dans ngOnInit()

21
Günter Zöchbauer

avec Angular 7.2, routeur 7.2, vous pouvez faire ce qui suit.

constructor(
    private router: Router
) {
    this.router.routeReuseStrategy.shouldReuseRoute = function(){
        return false;
    }  
}

J'ai essayé plusieurs façons, mais c'était la seule façon dont mon routeur a chargé le contenu du composant vers lequel je navigue.

vous pouvez en savoir plus sur les stratégies de réutilisation des itinéraires ici

3
alaasdk