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

如何实现全选功能?附Angular Material多选选择器示例代码

如何实现Angular Material选择器的全选功能?

嘿,我来给你一步步搞定Angular Material多选选择器的全选功能~ 先从基础的多选结构入手,再添加全选的逻辑。

第一步:基础多选选择器实现

先搭好带多选功能的选择器基础结构,HTML和TS代码如下:

HTML代码

<mat-form-field>
  <mat-select placeholder="Toppings" [formControl]="toppings" multiple>
    <mat-option *ngFor="let topping of toppingList" [value]="topping">{{topping}}</mat-option>
  </mat-select>
</mat-form-field>

TypeScript代码

import {Component} from '@angular/core';
import {FormControl} from '@angular/forms';

/** @title 带多选功能的选择器 */
@Component({
  selector: 'select-multiple-example',
  templateUrl: 'select-multiple-example.html',
})
export class SelectMultipleExample {
  toppings = new FormControl('');
  toppingList: string[] = ['Extra cheese', 'Mushroom', 'Onion', 'Pepperoni', 'Sausage', 'Tomato'];
}

第二步:添加全选功能

接下来我们给选择器加上全选选项,并实现对应的逻辑:

1. 修改HTML,添加全选选项

在mat-select里最上方添加一个专门的全选选项,绑定点击事件和选中状态:

<mat-form-field>
  <mat-select placeholder="Toppings" [formControl]="toppings" multiple>
    <!-- 全选选项 -->
    <mat-option 
      (click)="toggleAllSelection()" 
      [selected]="isAllSelected()"
    >
      全选
    </mat-option>
    <!-- 原有选项 -->
    <mat-option *ngFor="let topping of toppingList" [value]="topping">{{topping}}</mat-option>
  </mat-select>
</mat-form-field>

2. 完善TS逻辑,实现全选/取消全选

在组件类里添加两个方法:一个用于切换全选状态,另一个用于判断是否所有选项都已选中,来同步全选选项的选中状态:

import {Component} from '@angular/core';
import {FormControl} from '@angular/forms';

/** @title 带全选功能的多选选择器 */
@Component({
  selector: 'select-multiple-example',
  templateUrl: 'select-multiple-example.html',
})
export class SelectMultipleExample {
  toppings = new FormControl('');
  toppingList: string[] = ['Extra cheese', 'Mushroom', 'Onion', 'Pepperoni', 'Sausage', 'Tomato'];

  // 切换全选/取消全选
  toggleAllSelection() {
    if (this.isAllSelected()) {
      // 如果已经全选,就清空所有选项
      this.toppings.setValue([]);
    } else {
      // 如果未全选,就选中所有选项
      this.toppings.setValue([...this.toppingList]);
    }
  }

  // 判断是否所有选项都已选中
  isAllSelected(): boolean {
    const selectedItems = this.toppings.value || [];
    return selectedItems.length === this.toppingList.length;
  }
}

这样就完成啦!点击「全选」选项可以一键选中所有配料,再次点击就能清空所有选择,而且全选选项的选中状态会自动和当前选择情况同步~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:42:04