Angular 2 sessionStorage после сохранения сеанса устанавливает текущее значение без изменений

Мне нужна помощь по поводу проблемы с sessionStorage.

Когда я меняю значение из раскрывающегося списка, оно меняется на странице, но после того, как я нажимаю на другую страницу и возвращаюсь, значение не сохраняется. Итак, что я сделал:

handleOnItemsPerPage(itemsPerPage) {

  sessionStorage.setItem('itemsPerPage', JSON.stringify(itemsPerPage));

  this.onFilter.emit({
    items: this.cachedItems,
    field: 'type',
    type: this.selectedCategory,
    query: this.searchQuery,
    itemsPerPage: parseInt(itemsPerPage, 10),
    sortAsc: this.isAscSort,
    page: this.page
  });
}

Когда я меняю значение, я сохраняю его в хранилище сеанса, поэтому, когда я возвращаюсь, чтобы отобразить его. Итак, в моем ngInit:

ngOnInit() {
   this.sessionStorage =  JSON.parse(sessionStorage.getItem('itemsPerPage'));
}

И в html:

<app-pager [pagedItems]="pagedItems"
[itemsPerPage]="sessionStorage ? sessionStorage : itemsPerPage"
[page]="page"
(onPageChange)="handleOnPageChange($event)"
(onItemsPerPage)="handleOnItemsPerPage($event)">
</app-pager>

Проблема в том, что первый раз работает, если я меняю значение и возвращаюсь на страницу, оно применяет изменения, но после того, как я снова меняю значение, оно меняется не на текущее значение, а на сеансовое.

Как именно это исправить? Спасибо.


person IleNea    schedule 21.09.2018    source источник


Ответы (1)


Он изменится только при перезагрузке по простой причине, после чего будет активирован ngOnInit. Если вы хотите изменить значение, вы должны изменить его и сохранить значение.

sessionStorage.setItem('itemsPerPage', JSON.stringify(itemsPerPage));
this.sessionStorage =  itemsPerPage;

Если вы хотите узнать, почему двусторонняя привязка не работает, попробуйте:

let a = 10;
let b = JSON.parse(JSON.stringify(a));

Обычно, если вы сделаете let b = a;, а затем измените a, b будет изменено на, но теперь вы можете изменить a, а b не изменится. Мы называем это глубокой копией.

person Swoox    schedule 21.09.2018