You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在页面刷新后保存用户选择的mat-option选项值?

Mat-Select刷新后保留用户选择值的解决方案

问题描述

我使用mat-option组件实现分页条数选择器,默认值为10,用户可选择25、50、100等数值。希望页面刷新后,默认值自动变为用户之前选择的数值,但尝试使用localStorage后,刷新页面数值仍会重置。现有代码如下:

HTML代码

<div class="col-md-auto">
  <mat-form-field style="width: 100px;">
    <mat-label>Elements on page</mat-label>
    <mat-select style="width: 100px" [(ngModel)]="limit">
      <mat-option value="10">10</mat-option>
      <mat-option value="25">25</mat-option>
      <mat-option value="50">50</mat-option>
      <mat-option value="100">100</mat-option>
    </mat-select>
  </mat-form-field>
</div>

TypeScript代码

limit:any = '10';

ngOnInit(): void {
    localStorage.setItem("limit", localStorage.getItem("limit"))
  
}

问题分析

现有代码存在两个关键问题:

  • ngOnInit中仅将localStorage的limit值重新存入,未将存储的值赋值给组件的limit变量,导致初始化时始终使用默认值10。
  • 未监听用户选择变化,无法将新选择的数值同步到localStorage。

修正方案

1. 初始化读取localStorage值

在组件初始化时,优先从localStorage读取保存的数值,若存在则覆盖默认值。

2. 监听选择变化同步存储

通过ngModelChange事件监听用户选择,将新数值存入localStorage。

修正后的HTML代码

<div class="col-md-auto">
  <mat-form-field style="width: 100px;">
    <mat-label>Elements on page</mat-label>
    <mat-select style="width: 100px" [(ngModel)]="limit" (ngModelChange)="onLimitChange($event)">
      <mat-option value="10">10</mat-option>
      <mat-option value="25">25</mat-option>
      <mat-option value="50">50</mat-option>
      <mat-option value="100">100</mat-option>
    </mat-select>
  </mat-form-field>
</div>

修正后的TypeScript代码

limit: any = '10';

ngOnInit(): void {
  // 读取localStorage中的值,存在则覆盖默认值
  const savedLimit = localStorage.getItem("limit");
  if (savedLimit) {
    this.limit = savedLimit;
  }
}

onLimitChange(newValue: any): void {
  // 用户选择新值时,同步更新localStorage
  localStorage.setItem("limit", newValue);
}

效果说明

页面初始化时,会优先加载localStorage中保存的用户上次选择的数值;用户每次切换选项时,新数值会自动存入localStorage,刷新页面后将保持用户的选择状态。

内容的提问来源于stack exchange,提问作者Mega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 16:02:38