2017-10-11 48 views
1

我编程应用程序,它具有亲子关系,我在寻找最好的做法来处理数据/事件流。 家长有发送给子组件的项目列表。角2/4父子沟通

儿童组件具有用于更新当前值的数据项。此时,正在从儿童处理更新值。我做了如下:当我从服务器获得成功时,我只是确保孩子的价值观是好的。我已经使这个数据传播到父母(eventEmitter)成为可能,但在这一刻,我对此没有做任何事情? 我应该使用双向数据在这里还是没有约束力?或者我应该使用onActivityUpdated将该项目传播给父项?孩子是否应该处理呼叫服务并更新该值?

儿童列表显示为列表(同一页上的所有数据),所以它可以编辑一个孩子,然后又......然后应该有免于父母所有选项。处理这个问题的最佳方式是什么?家长应该发起呼叫服务,然后更改所有值吗?

这里的代码,所以到目前为止,我最中省略的不必要的东西...

家长有项目列表,其被送到儿童是这样的:

TS:

export class ParentComponent implements OnInit { 
//Filtered items 
@Input() 
public items: Client[]; 

HTML:

<case-activity-time-edit-item *ngFor="let item of items; let i = index" [(element)]="items[i]" (activityUpdated)="onActivityUpdated($event)"></case-activity-time-edit-item></div> 

这里的孩子:

你正在做
export class ChildComponent implements OnInit { 
@Input() 
public element: Client; 

@Output() 
public activityUpdated: EventEmitter<Client> = new EventEmitter<Client>(); 
+0

如果我们在这里处理的对象,我们需要记住,对象是可变的JS,所以在这种情况下,它们被传递通过参考,所以无论你如何处理孩子的数据,父母都会知道即使没有平衡测验。只是要小心,这可能并不总是你想要的,但看起来你希望在这里发生。也似乎某种形式在这里会很有用,因为你正在讨论编辑和保存数据。我会使用反应形式,这真的很棒,有很多功能! :) – Alex

回答

0

一切看起来都不错。我唯一的建议是采用双向绑定,保持父母与子女值同步:

_element: Client; 
@Input() set element(val) { 
    this._element = val; 
} 
get element() { 
    return this._element; 
}