角度材料表保存和恢复排序顺序到本地/会话存储

Posted

技术标签:

【中文标题】角度材料表保存和恢复排序顺序到本地/会话存储【英文标题】:angular material table saving and restoring sort order into local/-session storage 【发布时间】:2021-12-30 04:12:07 【问题描述】:

我想将材料表的排序存储在本地或会话存储中。因为我在不同的页面上有多个表格,所以应该为每个页面保存排序值。

【问题讨论】:

到目前为止您尝试过什么,为什么这对您不起作用?你能分享一些你的代码和它的行为吗? 【参考方案1】:

我为此创建了一个自定义指令。基本上,唯一需要保存的值是排序列的 id 和排序 direction。我已经定义了一个定义这两个值的接口 MatSortData。为了根据页面保存状态,路径名被添加到键中。

如果您想将值保存在 localStorage 中,只需将其替换为 sessionStorage 变量即可。

const KEY = 'MAT_SORT';


@Directive(
  selector: '[sortingCache]'
)
export class SortingDirective 

  get matSort(): MatSortData 
    return JSON.parse(sessionStorage.getItem(window.location.pathname + '?' + KEY));
  

  set matSort(mat: MatSortData) 
    sessionStorage.setItem(window.location.pathname + '?' + KEY, JSON.stringify(mat));
  

  constructor(
    private el: MatSort,
  ) 

  ngOnInit(): void 
    if(this.matSort) 
      this.el.active = this.matSort.active;
      this.el.direction = this.matSort.direction;
    
    this.el.sortChange.subscribe((sort: Sort) => 
      this.matSort =  
        active: sort.active, 
        direction: sort.direction
      
    );
  


interface MatSortData 
  active: string;
  direction: SortDirection;

该指令只需添加到一个排序标头即可工作。示例 html

<ng-container matColumnDef="example">
    <mat-header-cell 
        sortingCache 
        mat-header-cell 
        *matHeaderCellDef 
        mat-sort-header
    >
        Example Header
    </mat-header-cell>
    <mat-cell mat-cell *matCellDef="let element"></mat-cell>
</ng-container>

【讨论】:

以上是关于角度材料表保存和恢复排序顺序到本地/会话存储的主要内容,如果未能解决你的问题,请参考以下文章

Android ArrayList<String> 存储未恢复到其保存的排序顺序

Web存储使用详解(本地存储会话存储)

storage

使用ajax调用的角度保存变量到laravel会话不起作用

使用 jquery ajax 在会话或会话存储中存储值

返回上一页时,保存恢复浏览记录(模拟返回不刷新)