1

我有一个父组件(P1)和两个子组件(C1 和 C2)。两个子组件都有一个可编辑的primeng 数据表。我在 P1 上有两个按钮: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()时,我无法从子组件中获取最新修改的值,因为我无法通知 P1 C1 和/或 C2 已更改数据。

有没有办法完成相同的操作,以便在调用save()时通知子组件并反映在ParentObj中?

4

2 回答 2

1

您可以为此目的使用事件发射器,这在从子组件到父组件通信时最有用。

例子:-

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
于 2017-09-27T20:06:20.320 回答
1

我能够使用ViewChildfrom解决它,'@angular/core'因为子组件上没有事件触发器。父级可以使用参考读取子级属性@ViewChild(ChildComponent) child;这里

于 2017-11-14T13:20:38.450 回答