【问题标题】:Communicating from nested child to parent by passing subject通过传递主题从嵌套的孩子到父母的沟通
【发布时间】:2020-03-11 12:49:43
【问题描述】:

我正在查看 Angular 文档和其他各种链接,以便在需要通知父组件的 Angular 子组件之间进行通信。这可以通过 ViewChild、Output() 和 EventEmitter 或与此处建议的服务共享数据来完成:https://angularfirebase.com/lessons/sharing-data-between-angular-components-four-methods/

如果嵌套的孩子需要通知父母并且我不想使用服务,我需要链接 EventEmitters 并重复发射,如下所示:Angular 2: How do I emit an event up through multiple nested components?

但是,我不使用服务或链接事件发射器,而是通过 Input() 绑定将 RxJs 主题向下传递到组件层次结构,在最低的子级中执行 next() 并在顶级父级中订阅,该怎么办?我还没有看到这个建议,但它可以工作并且看起来很简单。我的问题是,将这种模式用于嵌套子级到顶级父级通知有什么缺点吗?

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    这种模式的主要缺点是您的子组件已连接到父组件。稍后将更改您的组件的人也可以在父组件处执行next(),并且此流变得不一致。而且你必须在使用这个组件的任何地方创建这个主题,而不是使用 Output 的机制中的构建

    【讨论】:

    • 谢谢,我看到了它在顶层暴露主题方面的问题,但我没有看到通过 Input() 的耦合比 Output() 绑定更紧密?
    • 它破坏了组件的分离。例如,在子组件中,您可以在引用主题的属性中放置另一个东西。所以避免这种方式的主要原因是它破坏了组件模式,因为子组件可以直接更改父组件并且可能不清楚。难以调试
    • 建议将这些事件从组件中分离出来,让服务处理它,以防系统中的任何其他组件想知道发生了什么。整个方法基本上类似于 ngrx 和 CQRS,您应该检查一下
    猜你喜欢
    • 2019-05-22
    • 2017-07-01
    • 2011-02-20
    • 2011-02-21
    • 1970-01-01
    • 2021-04-25
    • 2020-01-29
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多