2017-04-18 23 views
0

如何在同级组件之间传递数据?比方说,我有一个不大不小的数据录入格,看起来像这样的:在数据网格中的同级组件之间共享数据

<tr *ngFor="let item of frm.controls.items.controls; let i=index" [formGroupName]="i"> 
    <td><input type="text" formControlName="id" /></td> 
    <td><input type="text" formControlName="name" /></td> 
</tr> 

而且,我们说,有一些打字稿是被触发或者在valueChangesfocusout事件处理中的每一个这些输入的数据领域。我的问题是,如果我需要访问专注于name字段的id数据。我怎样才能做到这一点?

onNameFocusout = function(nameControl) { 
    //get a handle of id control for the ROW that this name control belongs to 

因此,所有我曾访问是name控制某一行,我需要的id控制同一行。

我能想到几个不同的方式来做到这一点的:

  1. 在名称控件的HTML,在经过焦距偏离事件的ID控制。类似于<input type="text" formControlName="name" onNameFocusout="(frm.controls.items.controls[i].controls.id, frm.controls.items.controls[i].controls.name)" />

  2. 使用数据共享服务。在网格中输入的任何值也可在数据共享服务上使用,以供任何组件检索。这仍然需要知道该行的索引来检索数据。

有关如何以更好的方式完成此任务的建议,或者其中任何一种方法都应该正常工作。

感谢

回答

0

你应该能够得到模糊值:

模板:

<tr *ngFor="let item of frm.get('items'); let i=index" [formGroupName]="i"> 
    <td><input type="text" formControlName="id" /></td> 
    <td><input type="text" (blur)="onBlur(frm.get('items.' + i + '.id'))" formControlName="name" /></td> 
</tr> 

组件类:

onBlur(control: FormControl) { 
    let value = control.value; 
    // value = value of id 
}