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

响应式表单中自定义控件结合Validators.required不显示必填指示器的疑问

Angular自定义表单控件与MatInput的必填指示器差异问题

模板代码

<div [formGroup]="form">
  <mat-form-field>
    <mat-label>Phone number</mat-label>
    <example-tel-input formControlName="tel"></example-tel-input>
    <mat-icon matSuffix>phone</mat-icon>
    <mat-hint>Include area code</mat-hint>
  </mat-form-field>
  <mat-form-field>
    <mat-label>Mobile number</mat-label>
    <input type="text" matInput formControlName="mobile" />
  </mat-form-field>
</div>

表单验证配置

form: FormGroup = new FormGroup({
  tel: new FormControl(null, [Validators.required]),
  mobile: new FormControl(null, [Validators.required]),
});

通过上述代码为两个控件设置必填验证后,使用MatInput的mobile控件会自动显示必填指示器(*),但自定义的example-tel-input控件却不会。

官方文档提到:

请注意required属性仍需保留在模板中。虽然它对验证来说并非必需,但出于无障碍访问的目的应予以保留。

这意味着自定义组件需要在模板中手动添加required属性才能显示必填指示器:

<example-tel-input formControlName="tel" required></example-tel-input>

针对这个情况有两点疑问:

  • 手动添加required属于重复代码,因为已经在FormControl中配置了必填验证
  • 为何MatInput能自动识别FormControl中的required验证器并显示指示器,自定义控件却做不到?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:17:41