Dies kann jetzt in Angular 5.1 mithilfe der onSameUrlNavigationEigenschaft der Routerkonfiguration erfolgen.
Ich habe einen Blog hinzugefügt, der erklärt, wie hier, aber der Kern davon ist wie folgt
https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
In der onSameUrlNavigationOption zum Aktivieren der Routerkonfiguration setzen Sie diese Option auf 'reload'. Dies führt dazu, dass der Router einen Ereigniszyklus auslöst, wenn Sie versuchen, zu einer bereits aktiven Route zu navigieren.
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
Stellen Sie in Ihren Routendefinitionen runGuardsAndResolversauf ein always. Dadurch wird der Router angewiesen, die Schutz- und Auflösungszyklen immer zu starten und damit verbundene Ereignisse auszulösen.
export const routes: Routes = [
{
path: 'invites',
component: InviteComponent,
children: [
{
path: '',
loadChildren: './pages/invites/invites.module#InvitesModule',
},
],
canActivate: [AuthenticationGuard],
runGuardsAndResolvers: 'always',
}
]
Schließlich müssen Sie in jeder Komponente, die Sie das Neuladen aktivieren möchten, die Ereignisse behandeln. Dies kann durch Importieren des Routers, Binden an die Ereignisse und Aufrufen einer Initialisierungsmethode erfolgen, die den Status Ihrer Komponente zurücksetzt und bei Bedarf Daten erneut abruft.
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();
}
}
}
Wenn alle diese Schritte ausgeführt wurden, sollte das erneute Laden der Route aktiviert sein.