我使用的是角材料6,我有一个值,当移动到正确显示的垫子误差后,垫子误差未显示。
不工作代码:
<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-错误:与提供的解决方案不同,此方法将处理所有mat-错误,而不需要将匹配器应用于每个输入字段。
1-创建-error-state.matcher.ts文件:
import {FormControl, FormGroupDirective, NgForm } from '@angular/forms';
import {ErrorStateMatcher} from '@angular/material/core';
export class TouchedErrorStateMatcher implements ErrorStateMatcher {
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
return !!(control && control.invalid && (control.dirty || control.touched));
}
}
2-在app.module进口:
import { ErrorStateMatcher } from '@angular/material/core';
import { TouchedErrorStateMatcher } from './your-folder-path/touched-error-state.matcher';
3-现在将其提供给提供商:
@NgModule({
providers: [
AuthService,
UserService,
{ provide: ErrorStateMatcher, useClass: TouchedErrorStateMatcher }
],
})
4-重新提供应用程序。
我发现了一个非常简单的解决方案,不需要重写ErrorStateMatcher类,只需在app.module.ts中导入即可
1-导入库:
import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core';
2-添加到提供程序,如:
@NgModule({
providers: [
AuthService,
UserService,
{ provide: ErrorStateMatcher, useClass: ShowOnDirtyErrorStateMatcher }
],
})
重新提供应用程序。
Reza Taba于2021年1月2日更新
但是,上面的简短解决方案存在一个问题:如果用户在触摸(模糊)后将字段留空,则不会显示所需的错误。
请参阅我的解决方案以获得修复。
是的,mat-error
默认不显示。它只显示当输入被触摸
。
但是,幸运的是,您可以使用绑定到mat input
元素的errorStateMatcher
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();
我也在你的分叉堆栈闪电战中添加了相同的代码
建议:
您无需为指定formControlName
的mat错误提供
ngIf
条件。它将根据其所在的mat form字段
自动考虑。
我想突出显示点击的选定值的背景颜色。我正在演示这个例子,它突出显示了多个选择值。我想在单击以选择一个选项时只突出显示所选的值。
我目前面临着一个奇怪的问题,即mat芯片列表和输入。我有一个表单组,它有两个表单控件:contacts和name。 此窗体的视图如下所示: 问题:当我从输入字段中删除所有元素时,父窗体(formGroup)被标记为无效,但formGroup的错误属性不包含任何值。所以错误永远不会出现。 其他尝试:但当我使用一个正常的输入元素,该元素具有matInput属性,但没有mat芯片列表时,当我删除输入字段
我在应用程序中使用Angular Material,并且Mat-select基于循环多次显示,并且一些条件我需要在ngAfterViewInit()中的Mat-select中默认选择数据 循环,它处理多个mat-select 我正在创建多个mat-select代码 TS代码为 如果我在itemid中显示值,则itemid在ngModel中是正确的,但未呈现Mat-select请帮助
我正在使用角材料,我有问题显示两种类型的按钮:垫触控按钮和垫平按钮。 除这两个按钮外,其他按钮都在工作。我已经导入了所需的所有模块。 我怎么才能让他们工作呢?
我试着用angular-6中的angular材质 我的材料。单元ts是这样的 它正在给出错误 请帮帮我
我正在使用angular 8.0.0,angular material和Fuse主题作为管理面板。问题是,每当我更改mat-select的样式时,它就会被应用,但在一两次刷新后,角度材质会覆盖本地组件更改并应用默认的。 它也会应用到所有组件,我如何才能只更改一个mat-select的样式? 我的html中有问题的部分: scss文件: } 尝试了stackoverflow的所有建议,但似乎无法改变