当将嵌套的FormControls放置在单独的组件中时,如何访问Angular formarray的索引值



我遵循网站链接的教程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()
}

最新更新