J'appelle router.navigate
sur la même page avec certains paramètres de chaîne de requête. Dans ce cas, ngOnInit()
n'appelle pas. Est-ce par défaut ou dois-je ajouter quelque chose?
Vous pouvez injecter le ActivatedRoute
et vous abonner à params
constructor(route:ActivatedRoute) {
route.params.subscribe(val => {
// put the code from `ngOnInit` here
});
}
Le routeur ne détruit et ne recrée le composant que lorsqu'il navigue vers un autre itinéraire. Lorsque seuls les paramètres de route ou de requête sont mis à jour alors que la route est identique, le composant ne sera ni détruit ni recréé.
Une autre façon de forcer la recréation du composant consiste à utiliser une stratégie de réutilisation personnalisée. Voir aussi Le routeur 2.0.0 angular2 ne recharge pas les composants lorsque la même URL est chargée avec des paramètres différents? (il ne semble pas y avoir beaucoup d'informations disponibles, mais comment les implémenter)
Vous pouvez ajuster reuseStrategy sur le routeur.
constructor(private router: Router) {
// override the route reuse strategy
this.router.routeReuseStrategy.shouldReuseRoute = function() {
return false;
};
}
Avez-vous probablement besoin d'une page de rechargement? Voici ma solution: j'ai changé mon @NgModule (dans le fichier app-routing.module.ts dans mon cas):
@NgModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})] })
Ce problème provient probablement du fait que vous ne résiliez pas vos abonnements à l'aide de ngOnDestroy. Voici comment se faire faire.
Importez l’abonnement suivant rxjs. import { Subscription } from 'rxjs/Subscription';
Ajoutez OnDestory à votre Angular Core Import. import { Component, OnDestroy, OnInit } from '@angular/core';
Ajoutez OnDestory à votre classe d'exportation. export class DisplayComponent implements OnInit, OnDestroy {
Créez une propriété d'objet avec une valeur de Subscription from rxjs sous votre classe d'exportation pour chaque abonnement du composant. myVariable: Subscription;
Définissez la valeur de votre abonnement sur MyVariable: Subscriptions. this.myVariable = this.rmanagerService.getRPDoc(books[i].books.id).subscribe(value => {});
Ensuite, juste en dessous de ngOninit, placez le hook cycle de vie ngOnDestory () et insérez votre déclaration de désinscription pour votre abonnement. Si vous en avez plusieurs, ajoutez d'autres ngOnDestroy() { this.myVariable.unsubscribe(); }
NgOnInit
serait appelé une fois lors de la création d'une instance. Pour la même instance NgOnInit
ne sera plus appelé. Pour l'appeler, il est nécessaire de détruire l'instance créée.
Pensez à déplacer le code que vous aviez dans ngOnInit dans ngAfterViewInit. Ce dernier semble être appelé sur la navigation du routeur et devrait vous aider dans ce cas.