angular - Angular:强制验证模板驱动的表单
问题描述
我有一个这样的模板驱动表单:
<form #docForm="ngForm">
...
<input type="text"
required
[attr.name]="name"
[(ngModel)]="value" />
</form>
然后我有一个按钮,它应该检查表单是否有效,即使所有表单的字段都未被触及。单击按钮时,应验证并突出显示所有无效表单的字段。所以我的组件代码如下所示:
@ViewChild(NgForm, {static: false}) form: NgForm;
...
someButtonHandler() {
// this.form.controls collection is always empty!
for (const fieldName in this.form.controls) {
... do something with form controls
}
}
我走对了吗?为什么this.form.controls集合总是空的?
可能有一些更正确的方法来解决我的问题?
解决方案
您可以将模型类与模板驱动的表单一起使用,这将在按钮单击时验证表单。
例如:
import { Component } from '@angular/core';
export class User {
public name: string;
public email: string;
}
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
model = new User();
constructor() { }
onSubmit(form) {
console.log(form.value)
}
}
<div class="container">
<h4>Template-driven Form</h4>
<form #userForm="ngForm" (ngSubmit)="onSubmit(userForm)">
<div *ngIf="model.isName" class="form-group">
<label>Name</label>
<input type="text" class="form-control" [(ngModel)]="model.name" name="name" #name="ngModel"
[ngClass]="{ 'is-invalid': userForm.submitted && name.invalid }" required>
<div class="invalid-feedback" *ngIf="userForm.submitted && name.invalid">
<p *ngIf="name.errors.required">Name is required</p>
</div>
</div>
<div class="form-group">
<label>Email</label>
<input type="email" class="form-control" name="email" [(ngModel)]="model.email" #email="ngModel"
[ngClass]="{ 'is-invalid': userForm.submitted && email.invalid }" email required>
<div *ngIf="userForm.submitted && email.invalid" class="invalid-feedback">
<div *ngIf="email.errors.required">Email is required</div>
<div *ngIf="email.errors.email">Must be a valid email address</div>
</div>
</div>
<div class="form-group">
{{userForm.valid}}
<button class="btn btn-danger btn-block">Submit</button>
</div>
</form>
</div>
推荐阅读
- angular - 带有数据的角度嵌套组件
- ballerina - 为旧版本运行 Ballerina 项目时出现 DB 错误
- amazon-web-services - AWS S3 存储桶限制访问
- javascript - 如何在元素属性中设置 JavaScript 对象的数组?
- phonegap - 尽管适用于 Android,但 iOS 的 PhoneGap 构建失败
- reactjs - 尽管状态已更新,但我在 React 中使用 axios 发布请求后 DOM 未更新
- html - div 填充屏幕高度的其余部分
- sql-server - 来自 CTE 的多个 COUNT(DISTINCT)
- php - 如果在php中为真,如何跳过条件?
- ajax - 如果部分预订日,则将 partial_book_days 更改为 fully_booked_days