我遵循网站链接的教程https://scotch.io/tutorials/how-to-build-nested-nested-model-drive-forms-in-angular-2制作一个反应性形式,具有添加多种形式控件的能力,并且效果很好。我在教程中的指导下将嵌套的形式控件移动到单独的组件中,我需要从父组件访问formarray的索引值。我希望此索引值设置在formconrols默认值之一中,这是我在plnkr中的代码,http://plnkr.co/edit/zjeubwrmjdirmp4feczv?p=preview
我分开的一天和描述组件,
import { Component, Input } from '@angular/core';
import { FormArray, Validators, FormGroup } from '@angular/forms';
@Component({
selector: 'day-and-daydescription',
template: ` <div [formGroup]="formGroup">
<div class="form-group col-xs-4" >
<label for="text">Day</label>
<input type="text" class="form-control" formControlName="day" [ngModel]="group.i + 1" readonly>
</div>
<!--Day Description-->
<div class="form-group col-xs-4">
<label>Description</label>
<input type="text" class="form-control" formControlName="description">
</div>
<div>`
})
export class DayAndDescriptionComponent {
@Input('group')
public formGroup: FormGroup;
}
请查看Plunker中的整个代码。
正如您所注意到的,您可以从父母那里操纵整个表格,无需尝试从孩子那里访问索引。您在父母中执行的所有表格都会反映在孩子中。
关于错误:
表达在检查后发生了变化。
这是正常的,并在开发模式下发生。表达式___的摘录在检查后发生了变化:
简而言之,在DEV模式下,每一轮更改检测紧随其后的第二轮,自从第一个结束以来就不会验证任何绑定,这将表明变化本身是由变化引起的。
是儿童中的实际@Input
引起了这一点。您可以手动触发更改检测,此错误将消失。由于我们正在处理@Input
,因此您可以在ngOnChanges
中进行此操作:
constructor(private ref: ChangeDetectorRef) { }
ngOnChanges() {
this.ref.detectChanges()
}