Компонент связи |Кнопки браузера «Назад» и «Вперед» |Восстановить history.state полезную нагрузку - PullRequest
0 голосов
/ 11 ноября 2019

Проблема

При помещении данных полезной нагрузки в историю для передачи их другому компоненту данные теряются при использовании кнопок браузера «Назад» и «Вперед».

Я реализовал собственное решение для восстановления предыдущих полезных данных.

Мое решение

// 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, и решение больше похоже на взлом.

...