Można to teraz zrobić w Angular 5.1 przy użyciu onSameUrlNavigation
właściwości konfiguracji routera.
Dodałem blog wyjaśniający, jak tutaj, ale istota jest następująca
https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
W onSameUrlNavigation
opcji włączania konfiguracji routera , ustawiając ją na 'reload'
. Powoduje to, że router uruchamia cykl zdarzeń, gdy próbujesz nawigować do już aktywnej trasy.
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
W definicjach tras ustaw runGuardsAndResolvers
na always
. To powie routerowi, aby zawsze uruchamiał cykle strażników i resolwerów, uruchamiając powiązane zdarzenia.
export const routes: Routes = [
{
path: 'invites',
component: InviteComponent,
children: [
{
path: '',
loadChildren: './pages/invites/invites.module#InvitesModule',
},
],
canActivate: [AuthenticationGuard],
runGuardsAndResolvers: 'always',
}
]
Wreszcie, w każdym komponencie, który chcesz włączyć przeładowywanie, musisz obsłużyć zdarzenia. Można to zrobić, importując router, wiążąc się ze zdarzeniami i wywołując metodę inicjalizacji, która resetuje stan komponentu i ponownie pobiera dane, jeśli jest to wymagane.
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();
}
}
}
Po wykonaniu wszystkich tych czynności należy włączyć ponowne ładowanie tras.