Тепер це можна зробити в Angular 5.1, використовуючи onSameUrlNavigation
властивість конфігуратора маршрутизатора.
Я додав блог, де пояснюється, як тут, але суть його полягає в наступному
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();
}
}
}
З урахуванням усіх цих кроків у вас має бути ввімкнено перезавантаження маршруту.