2017-10-11 77 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; 
}