Проблема
При помещении данных полезной нагрузки в историю для передачи их другому компоненту данные теряются при использовании кнопок браузера «Назад» и «Вперед».
Я реализовал собственное решение для восстановления предыдущих полезных данных.
Мое решение
// some.component.ts
//
// navigate and set payload in arbitrary component
this.router.navigate(['/course/create'], {
state: { payload: cid }
});
// app.component.ts
//
// restore payload on using Back and Forward buttons
private historyStateCache = [];
ngOnInit() {
this.router.events.subscribe((event: Event) => {
if (event instanceof NavigationStart) {
// SAVE CURRENT HISTORY
const state = JSON.parse(
JSON.stringify(this.router.getCurrentNavigation().extras.state || {})
);
this.historyStateCache[event.id] = state;
// PROCESS BACK AND FORWARD BUTTONS
if (event.restoredState) {
const targetId = event.restoredState.navigationId;
this.router.getCurrentNavigation().extras.state = this.historyStateCache[targetId];
// SAVE CURRENT HISTORY
const stateX = JSON.parse(
JSON.stringify(this.router.getCurrentNavigation().extras.state)
);
this.historyStateCache[event.id] = stateX;
}
}
}
Вопрос
Я не уверен, что это «правильный» вариант Angular? Я новичок в Angular, и решение больше похоже на взлом.