Теперь это можно сделать в Angular 5.1, используя onSameUrlNavigation
свойство конфигурации Router.
Я добавил блог, объясняющий, как здесь, но суть в следующем
https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
В настройках конфигурации роутера включите onSameUrlNavigation
его 'reload'
. Это заставляет маршрутизатор запускать цикл событий, когда вы пытаетесь перейти к уже активному маршруту.
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
В ваших определениях маршрута установите runGuardsAndResolvers
на always
. Это скажет маршрутизатору всегда запускать циклы защиты и распознавания, вызывая связанные события.
export const routes: Routes = [
{
path: 'invites',
component: InviteComponent,
children: [
{
path: '',
loadChildren: './pages/invites/invites.module#InvitesModule',
},
],
canActivate: [AuthenticationGuard],
runGuardsAndResolvers: 'always',
}
]
Наконец, в каждом компоненте, который вы хотите включить перезагрузку, вам нужно обрабатывать события. Это может быть сделано путем импорта маршрутизатора, привязки к событиям и вызова метода инициализации, который сбрасывает состояние вашего компонента и повторно выбирает данные, если это необходимо.
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();
}
}
}
После выполнения всех этих шагов у вас должна быть включена перезагрузка маршрута.