【问题标题】:Angular 2 components: child to child communicationAngular 2 组件:子对子通信
【发布时间】:2017-02-26 11:11:10
【问题描述】:
我在 Angular 2 应用程序中有三个组件:C0、C1 和 C2。第一个(C0)代表一个html模板,有多个子组件(ui元素)。
现在,如果有人点击了 C1 中的 按钮(菜单),我该如何通知 C2(日历)?
我尝试了来自 Angular 网站的 component communication page 的一些示例。我最终找到了一种方法,我在 C1 处采用了一个 EventEmitter,来通知父 C0。然后使用 setter 通知 C2。
这很有效,但看起来非常混乱,即使对于一手充满事件的手来说也是如此。如果我的应用最终可能有数百个事件,这不可能是解决方案。
有没有更好的方法来处理这种通信?
【问题讨论】:
标签:
angular
angular2-components
【解决方案1】:
我认为您应该将EventEmitter 添加到您提到的C1。
您可以通过将模板变量添加到 C2 并使用它来引用它,从而在不涉及 C0 的情况下绑定到 C2 上的方法:
<c1 (customEvent)="c2.onClick($event)"></c1>
<c2 #c2></c2>
【解决方案3】:
有没有更好的方法来处理这种通信?
取决于你认为哪个更好;)。
有一些方法可以运行,您只需要选择更易于理解且似乎更适合您的数据流。
例如您可以使用服务在这两个组件之间进行通信。我就是这样做的,我在服务中实现所有通信逻辑,所以我的组件仅用于表示逻辑。
【解决方案4】:
有没有更好的方法来处理这种通信?
您可以通过事件完美地解决这个问题,但是如果您使用 redux(或在 angular2、ngrx/store 中),这些问题往往会变得更容易。有很多关于这个主题的好文章和视频,虽然一开始可能看起来有点奇怪,但过一段时间就会变得很自然。
Google 并观看一些视频,这是一种非常有趣的工作方式,您还将开始了解 rxjs 的作用以及它如何为您的应用程序提供帮助。