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

为何标记为必填的控件为空时Angular FormGroup仍显示为有效状态?

Angular Mat-Select (Multiple) Required Validation Not Working

嘿,我一眼就看出问题出在哪了——你的多选下拉框校验失效是因为初始值和Validators.required的校验逻辑不匹配!

问题根源

当mat-select开启了multiple属性后,它绑定的表单控件值类型是数组。而Validators.required对数组的校验规则是:只有当数组完全为空(也就是[])时,才会判定为无效。但你现在给FormControl的初始值是['']——这是一个包含空字符串的非空数组,所以不管选没选选项,校验都会认为是有效的。

解决方案

1. 修正初始值为空白数组

直接把FormControl的初始值改成空数组,这样用户未选择任何选项时,控件值就是[],Validators.required就能正常触发校验:

this.formSubmission = new FormGroup({
  triggers: new FormControl([], [Validators.required])
});

2. (可选)添加自定义校验兜底(防止空值混入)

如果担心业务场景中可能出现数组里有空字符串的情况(比如后端返回的选项值异常),可以加个自定义校验器确保数组非空且没有无效值:

// 先写一个自定义校验函数
import { ValidatorFn, AbstractControl } from '@angular/forms';

const nonEmptyValidArray: ValidatorFn = (control: AbstractControl) => {
  const selectedValues = control.value as string[];
  // 数组为空,或者存在空/空白字符串,都判定为无效
  if (!selectedValues || selectedValues.length === 0 || selectedValues.some(val => val.trim() === '')) {
    return { invalidSelection: true };
  }
  return null;
};

// 然后在FormGroup中使用
this.formSubmission = new FormGroup({
  triggers: new FormControl([], [Validators.required, nonEmptyValidArray])
});

3. 在模板中添加错误提示(提升用户体验)

可以给mat-form-field加上错误提示,让用户清楚知道需要选择选项:

<div [formGroup]="formSubmission">
  <mat-form-field appearance="fill">
    <mat-label>Triggers</mat-label>
    <mat-select formControlName="triggers" multiple>
      <mat-option *ngFor="let trigger of triggersList" [value]="trigger.TRIGGER_NAME">{{trigger.TRIGGER_NAME}}</mat-option>
    </mat-select>
    <!-- 原生required的错误提示 -->
    <mat-error *ngIf="formSubmission.get('triggers')?.hasError('required')">
      请至少选择一个触发器
    </mat-error>
    <!-- 自定义校验的错误提示(如果用了的话) -->
    <mat-error *ngIf="formSubmission.get('triggers')?.hasError('invalidSelection')">
      请选择有效的触发器
    </mat-error>
  </mat-form-field>
</div>

现在再测试一下:当你没有选择任何选项时,点击测试按钮,this.formSubmission.status应该会返回INVALID,完全符合你的预期啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:48:11