2017-09-06 3 views
1

私は親コンポーネント(P1)と2つの子コンポーネント(C1とC2)を持っています。 両方の子コンポーネントには、編集可能なprimengデータテーブルがあります。 P1に2つのボタンがあります:fetch()とsave()です。 fetch()は、データベースを呼び出してデータを取得します。 私は共有サービスを使用してデータをフェッチし、BehaviorSubjectを使用してコンポーネントに渡します。 マイデータオブジェクトは、次のようになります。コンポーネントとの角度データ通信

export interface ParentObj { name: string; child1 : Child1[]; child2: Child2[]} 
export interface Child1 { weight: number;} 
export interface Child2 { code: string;} 

子コンポーネントは、共有サービスからデータをサブスクライブします。 問題は、子コンポーネントが所有するデータも変更されることです。 P1にsave()をクリックすると、C1および/またはC2がデータを変更したことをP1に通知する方法がないため、子コンポーネントから最新の変更値を取得できません。

とき(保存私は子コンポーネントに通知することができるように同じことを達成する方法はあります)が呼び出され、それがParentObjに反映されます?。

+0

チェックをこのアウト:https://stackoverflow.com/a/44455401/5346095 –

+0

@Manu:データがすでに親から子へ渡されていないが、子コンポーネントのイベントのようなコミュニケーションの手段がないので、他の方法で丸めます。 – Amit

+0

RxJSライブラリ –

答えて

0

Iは、子コンポーネントには、イベントトリガがなかったとして'@angular/core'からViewChildを使用してそれを解決することができました。子供を読むことができる 親は@ViewChild(ChildComponent) child; 参考使って属性:Here

0

この目的でイベントエミッタを使用できます。これは、子コンポーネントから親コンポーネントに通信するときに最も便利です。

例: -

P1成分: -

<c1 (notifyParent)="notify(data)"></c1> 
<c2 (notifyParent)="notify(data)"></c1> 

notify(data) { 
    console.log(data); //notify parent 
} 

C1成分: -

@Output() notifyParent= new EventEmitter(); 

、次いで

this.notifyParent.emit(data) //or notify with true value 

C2成分: -

@Output() notifyParent= new EventEmitter(); 

、次いで

this.notifParent.emit(data) //or notify with true value 
関連する問題