【问题标题】: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>
    

    【讨论】:

      【解决方案2】:

      您可以创建一个在您的子组件之间共享的服务,您可以在其中定义Observable,以便您可以从一个子组件订阅该Observable,并在您从另一个子组件接收一些值时执行一些操作。您可以查看https://stackoverflow.com/questions/39738974#39739184 用于父母与孩子的沟通,但您可以使用相同的方法进行孩子与孩子的沟通。

      【讨论】:

        【解决方案3】:

        有没有更好的方法来处理这种通信?

        取决于你认为哪个更好;)。

        有一些方法可以运行,您只需要选择更易于理解且似乎更适合您的数据流。

        例如您可以使用服务在这两个组件之间进行通信。我就是这样做的,我在服务中实现所有通信逻辑,所以我的组件仅用于表示逻辑。

        【讨论】:

          【解决方案4】:

          有没有更好的方法来处理这种通信?

          您可以通过事件完美地解决这个问题,但是如果您使用 redux(或在 angular2、ngrx/store 中),这些问题往往会变得更容易。有很多关于这个主题的好文章和视频,虽然一开始可能看起来有点奇怪,但过一段时间就会变得很自然。

          Google 并观看一些视频,这是一种非常有趣的工作方式,您还将开始了解 rxjs 的作用以及它如何为您的应用程序提供帮助。

          【讨论】:

            猜你喜欢
            • 2017-10-12
            • 1970-01-01
            • 1970-01-01
            • 2018-03-23
            • 1970-01-01
            • 2017-11-28
            • 1970-01-01
            • 2018-09-15
            • 2016-04-12
            相关资源
            最近更新 更多