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

Angular取消全选时保留必填/禁用复选框的解决方案

Angular mat-selection-list 全不选时保留必填禁用项选中实现

场景说明

在Angular项目中使用mat-selection-list实现复选框选择列表功能时,原有全不选方法直接调用clear()会清空所有选项的选中状态,包括标记为column.template.Mandatory的必填、禁用复选框,需要实现这类强制项始终保持选中,不受全不选操作影响。

原有问题代码

HTML模板

<mat-selection-list #selectedColumns [(ngModel)]="selectedOptions">
  <div class="content-section">
    <mat-expansion-panel>
      <mat-expansion-panel-header>
        <mat-panel-title> Account<mat-panel-title>
      <mat-expansion-panel-header>
      <mat-list-option class="download-columns" 
        checkboxPosition="before"
        *ngFor="let column of singleNodeColumns" 
        [selected]="column.template.Mandatory"
        [disabled]="column.template.Mandatory" 
        [value]="column.template">
        <div class="down load-columns-text">
          <span> {{column.template.Name}}</span>

注:原模板存在标签未闭合、标签名书写错误、class名多余空格问题,使用前需要修正:将<mat-panel-title>的闭合标签改为</mat-panel-title>,<mat-expansion-panel-header>闭合标签改为</mat-expansion-panel-header>,class名down load-columns-text改为download-columns-text,补全所有未闭合的组件标签。

TS逻辑

DeSelectionAll() { 
  this.selectedColumns.selectedOptions.clear(); 
}

实现方案

mat-selection-list的selectedOptions是内置的SelectionModel实例,原生clear()方法不会区分选项是否禁用/必填,直接清空所有选中状态。修改DeSelectionAll方法,清空后自动把所有强制必填项重新设为选中,同时同步双向绑定的selectedOptions数据即可:

DeSelectionAll() {
  // 清空现有所有选中状态
  this.selectedColumns.selectedOptions.clear();
  // 遍历列表选项,恢复必填项的选中状态
  this.singleNodeColumns.forEach(column => {
    if (column.template.Mandatory) {
      // 找到对应的列表选项实例设置选中
      const mandatoryOption = this.selectedColumns.options.find(
        opt => opt.value === column.template
      );
      if (mandatoryOption) {
        mandatoryOption.selected = true;
      }
      // 同步ngModel绑定的数据源,保证数据和视图一致
      if (!this.selectedOptions.includes(column.template)) {
        this.selectedOptions.push(column.template);
      }
    }
  });
}

逻辑说明

  • 先执行原有清空逻辑,取消所有非必填项的选中状态
  • 遍历数据源中所有标记为Mandatory的必填项,找到对应的列表选项手动设置为选中
  • 同步更新双向绑定的selectedOptions数组,避免视图和绑定数据不一致的问题
  • 因为必填项本身设置了[disabled]="true",用户无法手动取消选中,搭配全不选方法里的状态恢复逻辑,就能保证这类选项始终保持选中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:15:41