angular - 为什么使用自定义全局验证器在角度材料 6 的 mat-form 字段中未显示 mat-error
问题描述
我正在使用角度材料 6,当在 mat-form-field 之后移动到正确显示的 mat-error 时,mat-form-field mat-error 没有显示。
不工作代码:
<mat-form-field>
<input matInput type="time" formControlName="ToTime"/> <mat-error *ngIf="DaterForm.get('ToTime').hasError('InValidToTime')">FromTime Should be less than ToTime if choose a same date</mat-error>
</mat-form-field>
工作正常:
<input matInput type="time" formControlName="ToTime"/> </mat-form-field>
<mat-error *ngIf="DaterForm.get('ToTime').hasError('InValidToTime')">FromTime Should be less than ToTime if choose a same date</mat-error>
有人解释了为什么在该控件中不起作用。
现场演示: stackblitz
解决方案
是mat-error
的,默认情况下不显示。它仅在输入为 时显示touched
。
errorStateMatcher
但是,幸运的是,您可以使用绑定到mat-input
元素的输入属性覆盖此行为。
添加此功能的拉取请求。
用法 :
<mat-form-field>
<input matInput [errorStateMatcher]="matcher" [matDatepicker]="picker" placeholder="Choose a Start date"
formControlName="FromDate"
[min]="minFromDate"
[max]="maxToDate" >
<mat-datepicker-toggle matSuffix [for]="picker" ></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
<mat-error >Please provide a valid Fromdate</mat-error>
</mat-form-field>
所以你必须以ErrorStateMatcher
这种方式在你的代码中实现。
export class MyErrorStateMatcher implements ErrorStateMatcher {
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
const isSubmitted = form && form.submitted;
return (control && control.invalid);
}
}
matcher
并在您的组件中为类添加一个新对象ErrorStateMatcher
,该对象将作为一个值[errorStateMatcher]="matcher"
matcher = new MyErrorStateMatcher();
我还在您的分叉堆栈闪电战中添加了相同的代码
建议:
您无需提供ngIf
条件来mat-error
指定您的formControlName
. 它将根据mat-form-field
它所在的位置自动考虑。
推荐阅读
- azure - 使用托管标识进行 AKS 文件共享持久挂载 - 密钥轮换后出现问题
- python - Python:Transform or Melt and Groupby 一个数据框
- python - 检查我的不和谐机器人是否通过外部程序运行?- Python
- teradata - Teradata Parallel Transporter DDL 运算符 - 规则中缺少 { EXTENDED_LITERAL_ CHAR_STRING_LITERAL_ }:字符串文字错误
- android-jetpack-compose - 使用 ModalBottomSheetLayout 时,如何在 Jetpack compose 中使背景和状态栏透明
- python - 无法使用请求获得正确响应
- javascript - 复制对象数组以用作状态 - React.js
- c# - 从 ASP.NET MVC 应用程序中的操作链接发送值
- python - 增加 windows 上 postgres 中 cubedata.h 的限制
- python - Python re.search 在同一行中搜索多个值