angular - Angular material Input自定义mat错误问题
问题描述
我有一个带有formControl
自定义垫子错误的角度材料输入。当我实现 mat-error 时,它看起来像这样,Invalid
即使它没有聚焦。那有什么问题?
模板.html
<form class="myform">
<mat-form-field class="full-width">
<mat-label>Project</mat-label>
<input matInput
[formControl]="projectNameControl"
[errorStateMatcher]="matcher"
autocomplete="off" type="text"
placeholder="Type Project Name" >
<mat-error *ngIf="projectNameControl.hasError('required')">
Project name is <strong>required</strong>
</mat-error>
</mat-form-field>
</form>
组件.ts
import { FormControl, FormGroupDirective, NgForm, Validators } from '@angular/forms';
import { ErrorStateMatcher } from '@angular/material/core';
export class MyErrorStateMatcher implements ErrorStateMatcher {
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
const isSubmitted = form && form.submitted;
return !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));}}
@Component({
selector: 'app-upload-data',
templateUrl: './upload-data.component.html',
styleUrls: ['./upload-data.component.scss']
})
export class UploadDataComponent implements OnInit {
/*Rest Code here*/
projectNameControl = new FormControl('', [Validators.required]);
matcher = new MyErrorStateMatcher();
}
}
app.module.ts
import {ErrorStateMatcher, ShowOnDirtyErrorStateMatcher} from '@angular/material/core';
providers: [{provide: ErrorStateMatcher, useClass: ShowOnDirtyErrorStateMatcher}]
解决方案
首先,您已经创建了一个自定义错误状态匹配器,您已经绑定了输入,但是您已经在 app.module.ts 中将默认的 ErrorStateMatcher 切换为 ShowOnDirtyErrorStateMatcher。
这是预期的想法吗?你能扩展你的想法吗?
其次,您的输入看起来很奇怪。看起来它有一个错误(因为您已将光标聚焦,但占位符没有转换为标签。您检查控制台了吗?在我看来,某些东西没有正确安装,或者您忘记导入 MatInputModule?
推荐阅读
- docker - 在 Docker 中使用 redis-cli 订阅 Azure 中的 Redis 实例
- angularjs - 使用 ng-messages 在 angularjs 材料 md-input-container 中显示服务器端验证消息
- c++ - 二叉树中的随机插入
- sql - 返回购买给定项目的完整销售订单 SQL
- php - XAMPP phpMyAdmin 会话错误
- python - 登录后烧瓶重定向网址未重定向到主页
- cesium - 如何在 Cesium JS 中画一个半圆?
- vba - VBA 验证文件的正确(更新)版本的使用
- c# - 接口实现莫名转换List
列出 C# - javafx - 如何创建只读表视图并向其中添加数据?