#angular #angular-routing
Вопрос:
Я работаю над приложением Angular v12 с навигационными меню, в котором есть рабочие маршруты к каждому компоненту. У меня есть 1 страница, мне нужно иметь возможность щелкнуть по меню и обновить страницу. Если я нахожусь на странице пользователя, и навигационное меню пользователя уже было нажато, я хотел бы щелкнуть его еще раз и вернуться к самому себе, чтобы обновить страницу данными по умолчанию. Прямо сейчас, когда я нажимаю на навигационное меню, ничего не происходит. Я разместил точки останова в своем навигационном компоненте, и он не сломается, если я снова нажму на маршрут.
Мы будем очень признательны за любую помощь/руководство.
Мои маршруты настроены в приложении-routing.module.ts
const appRoutes: Routes = [
{path: "", component: HomeComponent},
{path: "users", loadChildren: ()=> UsersModule},
]
В моем файле ts компонента Nav я смотрю на состояние маршрутизатора, но
export class MyNavComponent implements OnInit {
@Input() menuItems: any[] = [];
selectedMenu = {} as RouteInfo;
constructor(private router: Router) {
router.events.subscribe((event) => {
if(event instanceof NavigationStart) {
// I placed a breakpoint here and it does not break if same menu link is clicked on again.
}
});
}
ngOnInit(): void {
}
}
Комментарии:
1. Почему вы хотите обновить страницу, когда используете Angular ?
Ответ №1:
Похоже, вам может понадобиться опция конфигурации onSameUrlNavigation.
class CustomReuseStrategy implements RouteReuseStrategy {
shouldReuseRoute() {
return false;
}
}
const ROUTES: Routes = [
...
];
@ngModule({
imports: [
RouterModule.forRoot(ROUTES, { onSameUrlNavigation: 'reload' }),
],
providers: [
{
provide: RouteReuseStrategy,
useClass: CustomReuseStrategy,
},
],
exports: [RouterModule],
})
Обратите внимание, что это только определяет, будет ли маршрут повторно обрабатывать URL-адрес и инициировать соответствующие действия и события, такие как перенаправление, защита и распознаватели. По умолчанию маршрутизатор повторно использует экземпляр компонента, когда он повторно переходит к тому же типу компонента, не посещая сначала другой компонент. Это поведение настраивается стратегией RouteReuseStrategy. Чтобы перезагрузить маршрутизированные компоненты при той же навигации по URL, вам необходимо установить onSameUrlNavigation в значение «перезагрузить» и предоставить RouteReuseStrategy, которая возвращает false для shouldReuseRoute.