从父级触发单个事件将触发angular中所有可重用组件中的事件

从父级触发单个事件将触发angular中所有可重用组件中的事件,angular,triggers,components,Angular,Triggers,Components,我是angular开发者,目前正在angular中开发复杂的应用程序。 我的项目结构如下图所示: 我有一个父组件和一个子组件。 我将一些数据传递到子组件中,并将其处理为子组件,然后在屏幕上显示。 现在我想更改父组件中的数据。我找到了将子函数调用到父函数的方法,方法是使用以下方法将子组件引用到父组件中: @ViewChild(ChildComponent) child: ChildComponent 并从中调用函数,如下所示: child.functionName(); 但是这个代码只从第一个

我是angular开发者,目前正在angular中开发复杂的应用程序。 我的项目结构如下图所示:

我有一个父组件和一个子组件。 我将一些数据传递到子组件中,并将其处理为子组件,然后在屏幕上显示。 现在我想更改父组件中的数据。我找到了将子函数调用到父函数的方法,方法是使用以下方法将子组件引用到父组件中:

@ViewChild(ChildComponent) child: ChildComponent
并从中调用函数,如下所示:

child.functionName();
但是这个代码只从第一个孩子那里调用

有没有办法通过父组件的单个触发器一次从所有子组件调用函数


如果有人有解决办法,请写在这里。

您只取了一个孩子。在它的位置上,您可以使用QueryList来获取单一类型的所有子级。然后使用它以循环方式在子对象中激发事件

例如:

@ContentChildren(ChildComponent) children: QueryList<ChildComponent>;

onButtonClick() {
  this.children.forEach((child: ChildComponent) => { child.functionName() });
}
或者按照主题的方式:

父组件

template: '<child [subject]="mySubject"></child>'

mySubject: Subject<boolean> = new Subkect<boolean>();

someButtonClick() {
  this.mySubject.emit(true);
}
@Input() subject: Subject<boolean>;

ngOnInit() {
  this.subject.subscribe((value: boolean) => doSomething{});
}
子组件

@Input() subject: Subject<boolean>;

ngOnInit() {
  this.subject.subscribe((value: boolean) => doSomething{});
}

最好将主题移动到一个服务,该服务可以在任何需要的地方注入。

感谢您提供的解决方案,但我找到了该解决方案。是否有其他解决方案或数据流,我们不需要在循环中调用函数。我只需要一个触发器。有可能吗?我们可以在这个场景中使用类似接口的概念吗?您所寻找的可能不可能。但是,如果您只想调用一次,您可以在父组件中有一个主题,并在子组件中侦听它。然后在父对象中执行subject.nextsomeVal,然后所有子对象都将收到相同的结果。好的,让我试试。