Cela peut maintenant être fait dans Angular 5.1 en utilisant le onSameUrlNavigation
propriété de la configuration du routeur.
J'ai ajouté un blog expliquant comment ici, mais l'essentiel est le suivant
https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
Dans l' onSameUrlNavigation
option d' activation de la configuration de votre routeur , définissez-la sur 'reload'
. Cela amène le routeur à déclencher un cycle d'événements lorsque vous essayez de naviguer vers une route déjà active.
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
Dans vos définitions d'itinéraire, définissez runGuardsAndResolvers
sur always
. Cela indiquera au routeur de toujours lancer les cycles de gardes et de résolveurs, déclenchant les événements associés.
export const routes: Routes = [
{
path: 'invites',
component: InviteComponent,
children: [
{
path: '',
loadChildren: './pages/invites/invites.module#InvitesModule',
},
],
canActivate: [AuthenticationGuard],
runGuardsAndResolvers: 'always',
}
]
Enfin, dans chaque composant dont vous souhaitez activer le rechargement, vous devez gérer les événements. Cela peut être fait en important le routeur, en se liant aux événements et en invoquant une méthode d'initialisation qui réinitialise l'état de votre composant et récupère les données si nécessaire.
export class InviteComponent implements OnInit, OnDestroy {
navigationSubscription;
constructor(
// … your declarations here
private router: Router,
) {
// subscribe to the router events. Store the subscription so we can
// unsubscribe later.
this.navigationSubscription = this.router.events.subscribe((e: any) => {
// If it is a NavigationEnd event re-initalise the component
if (e instanceof NavigationEnd) {
this.initialiseInvites();
}
});
}
initialiseInvites() {
// Set default values and re-fetch any data you need.
}
ngOnDestroy() {
if (this.navigationSubscription) {
this.navigationSubscription.unsubscribe();
}
}
}
Avec toutes ces étapes en place, vous devriez avoir activé le rechargement d'itinéraire.