会话存储后Angular 2 sessionStorage设置当前值未修改

时间:2018-09-21 11:22:08

标签: angular session-storage

我需要一些有关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>

问题是第一次工作,如果我更改值并返回页面,它将应用更改,但是再次更改值后,它不会更改为当前值,而是会话一个。

该如何解决? 谢谢。

1 个答案:

答案 0 :(得分:0)

它只会在重新加载的简单原因上发生变化,然后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则不会更改。我们称其为深拷贝。