在Angular 4应用程序的组件中考虑以下简单示例。它显示了一个带有两个输入字段的简单HTML表单。一个输入字段被直接执行,第二个是一个子组件内:如何在嵌套组件的表单中实现自动表单验证?
<form #personForm="ngForm">
<input type="text" required name="firstname [(ngModel)]="firstname"/>
<app-smart-input required [(model)]="lastname"></app-smart-input>
<button [disabled]="personForm.valid === false">Send</button>
</form>
分量被定义为子如下:
import { Component, EventEmitter, Input, OnInit, Output } from "@angular/core";
@Component({
selector: "app-smart-input",
templateUrl: "./smart-input.component.html",
styleUrls: ["./smart-input.component.css"]
})
export class SmartInputComponent {
////////////////
// PROPERTIES //
////////////////
@Input() model: string;
@Output() modelChange: EventEmitter<string> = new EventEmitter<string>();
@Input("required") required: boolean = false;
/////////////
// METHODS //
/////////////
updateChanges() {
this.modelChange.emit(this.model);
}
}
与下面的HTML:
<input type="text" [required]="required" [(ngModel)]="model" (ngModelChange)="updateChanges()" />
现在更新模型完全正常(firstname
和lastname
由用户输入按预期定义)。
我想实现的是按钮被禁用,除非填写了两个字段。请注意<input>
实现中的required
标志,因此这些值不应为null/undefined。
但不幸的是,该按钮现在仅在firstname
未定义好的情况下被禁用。但表格并不在乎lastname
。
我该怎么做到这一点?
注意:Angular 2 creating reactive forms with nested components是simular,但我使用模板驱动的形式,而不是反应形式。但它可能会以某种方式适应?