我需要一些有关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>
问题是第一次工作,如果我更改值并返回页面,它将应用更改,但是再次更改值后,它不会更改为当前值,而是会话一个。
该如何解决? 谢谢。
答案 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则不会更改。我们称其为深拷贝。