一旦你知道要寻找什么,这并不难。如果您以前从未做过,这可能是一个挑战。您收到的错误消息并不总是有帮助。
首先,您想在DetailsFields 组件中添加一些内容。新的Inputs 将允许您传入您在父组件中构建的表单组的实例。 car 和 carIndex 输入将用于传递子组件所需的值,以便像现在一样工作。
import { Component, OnInit, Input } from '@angular/core';
import { FormGroup } from '@angular/forms';
@Component({
selector: 'app-child',
templateUrl: './details-fields.component.html',
styleUrls: ['./details-fields.component.css']
})
export class DetailsFields implements OnInit {
@Input() form: FormGroup;
@Input() car: any;
@Input() carIndex: number;
ngOnInit() { }
}
其次,您想将父组件中的一些模板 HTML 移动到子组件。子组件模板 (details-fields.component.html) 最终将如下所示。第一个div 中的[formGroup]="form" 是这里真正的关键。这就是告诉子模板使用哪个表单组的原因。你在这之后的代码中从父级传递这个。
<div [formGroup]="form">
<div class="car-wrap" formArrayName="cars">
<div [ngClass]="car.make + '-car'" [formGroupName]="carIndex">
<p class="title">This car is a {{car.make}}</p>
<div formGroupName="details">
<input type="text" formControlName="make">
<input type="text" *ngIf="car.make != 'ford'" formControlName="model">
<input type="number" formControlName="year">
</div>
<div formGroupName="appearance">
<input type="text" formControlName="color">
</div>
</div>
</div>
</div>
父组件模板将只剩下这个。这是您将carsForm 表单组以及car 和carIndex 传递给子组件的地方。
<div id="cars" [formGroup]="carsForm">
<div *ngFor="let car of cars; let i = index;">
<app-child [form]="carsForm" [car]="car" [carIndex]="i"></app-child>
</div>
</div>
我做的最后一件事是将父组件中的样式移到 styles.css 文件中,以便所有组件都可以使用它们。
就是这样!实际上只是移动一些代码并添加一些输入,这样您就可以将孩子需要的东西传递给它。