Я создал приложение, которое использует router 3.0.0-beta.1
для переключения между разделами приложения. Я также использую location.go()
для эмуляции переключателя между подразделами одной и той же страницы. Я использовал <base href="/">
и несколько правил перезаписи URL, чтобы перенаправить все маршруты на index.html
в случае обновления страницы. Это позволяет маршрутизатору получать запрошенный подраздел как параметр URL. В основном мне удалось избежать использования HashLocationStrategy
.
routes.ts
export const routes: RouterConfig = [
{
path: '',
redirectTo: '/catalog',
pathMatch: 'full'
},
{
path: 'catalog',
component: CatalogComponent
},
{
path: 'catalog/:topCategory',
component: CatalogComponent
},
{
path: 'summary',
component: SummaryComponent
}
];
Если я нажимаю на подраздел в навигационной панели 2, все происходит:
-
logation.go()
обновляет URL-адрес необходимой строкой, чтобы указать текущий подраздел - Пользовательская анимация
scrollTo()
прокручивает страницу вверху запрошенного подраздела.
Если я обновляю страницу, я использую ранее определенный маршрут и извлекаю необходимый параметр для восстановления прокрутки до требуемого подраздела.
this._activatedRoute.params
.map(params => params['topCategory'])
.subscribe(topCategory => {
if (typeof topCategory !== 'undefined' &&
topCategory !== null
) {
self.UiState.startArrowWasDismised = true;
self.UiState.selectedTopCategory = topCategory;
}
});
Все работает отлично, за исключением случаев, когда я нажимаю кнопку "Назад". Если предыдущая страница была другим разделом, маршрутизатор приложений ведет себя так, как ожидалось. Однако, если предыдущая страница /url была подразделением, url изменяется на предыдущий, но ничего не происходит в пользовательском интерфейсе. Как определить, была ли нажата кнопка "Назад", чтобы вызвать функцию scrollTo()
для повторной работы?
Большинство ответов, которые я видел, относятся к событию onhashchange
, но это событие не запускается в моем приложении, так как у меня нет хеша в URL-адресе после...