С угловыми 5.1 Теперь это можно сделать с помощью опции onSameUrlNavigation
конфигурации в составе встроенного углового маршрутизатора. Достаточно просто настроить и уйти, хотя это и не очевидно из документации.
Первое, что вам нужно сделать, это установить параметр в вашем app.routing.ts
, если у вас есть файл или файл, в котором настроена маршрутизация вашего приложения.
Существует два возможных значения для onSameUrlNavigation 'reload'
или false
. Значение по умолчанию: false
, что не приводит к тому, что маршрутизатору предлагается перейти к активному маршруту. Мы хотим установить это значение в reload
. Стоит отметить, что reload
фактически не выполняет работу по перегрузке маршрута, он только повторно запускает события на маршрутизаторе, которые нам тогда нужно подключить.
@NgModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
Чтобы определить, когда эти события на самом деле уволили, вам нужно указать опцию runGuardsAndResolvers
конфигурации на вашем маршруте.Это может принимать три значения ...
paramsChange
- только огонь при изменении параметров маршрута, например. где id в /user/:id
изменениях
paramsOrQueryParamsChange
- пожар при изменении параметра маршрута или изменении параметра запроса. например id
или изменение limit
недвижимости в /user/:id/invites?limit=10
always
- Всегда огонь, когда маршрут навигация
Мы хотим, чтобы всегда указывать в этом случае. Пример маршрута показан ниже.
export const routes: Routes = [
{
path: 'invites',
component: InviteComponent,
children: [
{
path: '',
loadChildren: './pages/invites/invites.module#InvitesModule',
},
],
canActivate: [AuthenticationGuard],
runGuardsAndResolvers: 'always',
}
]
Это ваш маршрутизатор. Следующий шаг - фактически обработать события внутри одного из ваших компонентов. Вам нужно будет импортировать Router в свой компонент, а затем подключиться к событиям. В этом примере я подключился к событию NavigationEnd
, которое запускается после того, как маршрутизатор завершил навигацию с одного маршрута на другой. Из-за того, как мы настроили приложение, это теперь будет срабатывать, даже если вы попытаетесь перейти к текущему маршруту.
export class InviteComponent implements OnInit {
constructor(
// ... your declarations here
private router: Router,
) {
// subscribe to the router events
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.
}
}
Тяжелая атлетика идет в метод initialiseInvites()
, это где вы сбрасываете свойства их значения по умолчанию и извлекать данные из услуг, чтобы получить компонент обратно в исходное состояние.
Вам необходимо повторить этот шаблон для каждого компонента, который вы хотите перезагрузить, когда вы нажимаете или обновляете какую-либо кнопку обновления, не забудьте добавить опцию для каждого маршрута в файле маршрутизации.
Удалите routerLink и добавьте событие '(click)', которое перезагрузит страницу 'router.navigateByUrl ('/ link1');' – AngJobs
Интересная идея, но это вряд ли может быть «официальным» способом сделать это , может это? – TommyF
Это называется программной навигацией, поиск документов для Router 3 – AngJobs