angular - mat-form-field 总是显示所需的红色?
问题描述
mat-form-field
有没有办法在 a 有时总是显示红色required="true"
,即使我从未将焦点放在它上面或我触摸它?
<mat-form-field color="accent">
<input matInput placeholder="ID is required" required="true [(ngModel)]="uniqueID">
</mat-form-field>
我只想显示错误的红色,但从一开始,甚至在我触摸输入之前。
怎么可能?
解决方案
如果您愿意使用反应式表单...使用ngAfterViewInit
,您可以以编程方式将该字段标记为已触摸以强制错误。
不幸的是,我不熟悉如何通过模板驱动的表单来实现这一点。
setTimeout(() => { this.yourForm.controls['yourControl'].markAsTouched(); }, 0);
修订
根据我的原始答案,以及 Abhishek 对我的答案的扩展,以重新强制您可以使用反应式表单来做到这一点......我也想提供模板驱动的表单场景。
- 这里的共同主题是,无论您使用反应式表单还是模板驱动的表单,您都需要以编程方式将输入标记为已触摸...
- 在模板驱动的表单中,您还需要通过模板引用执行相同操作,以便您可以在 ngOnInit 生命周期挂钩中调用控件上的 markAsTouched() 方法。
设置 id 的模板引用并通过#id="ngModel"
输入将其绑定到 ngModel...您还需要在 id 的输入上分配名称,name="id"
这是绑定到 ngModel 的要求。
<mat-form-field color="accent">
<input matInput placeholder="ID is required" required="true" [(ngModel)]="uniqueID" name="id" #id="ngModel">
</mat-form-field>
<div *ngIf="id.invalid && (id.dirty || id.touched)">
<mat-error *ngIf="id.errors.required">
ID is <strong>required</strong>
</mat-error>
</div>
<pre>id.errors: {{id.errors | json}}</pre>
从这里你需要@ViewChild
在你的组件中使用通过 ngOnInit 生命周期钩子获取对控件的引用#id
和调用。markAsTouched()
import {Component, OnInit, ViewChild} from '@angular/core';
@ViewChild('id') _id : any
ngOnInit(){
this._id.control.markAsTouched();
}
推荐阅读
- testing - 如何在 Ranorex 中从数据库中设置用户名和密码?
- bash - 删除csv bash中的双引号
- c++ - 将 long long 整数映射到对向量
- node.js - 您可以在 ExpressJS 应用程序中多次调用“express()”吗?(或者:“express()”到底在做什么?)
- angular - 在 forEach 中处理带有错误的 http 调用 - Angular 9
- windows - 通过 WSL 上的 VS 代码将提交推送到 SSH 克隆的存储库会返回“主机密钥验证失败”——在 HTTPS 上没问题
- google-app-engine - 将实体键转换为 urlsafe 字符串
- google-cloud-firestore - 我尝试了 firestore 迁移器代码的“npm run build”,但没有任何反应
- java - 关闭 InputStream 是否会关闭与其关联的 Channel?
- ios - 如何用西班牙语构建 Nativescript 应用程序?