【问题标题】:Contextual handling of RxJS Subject in Angular serviceAngular 服务中 RxJS 主题的上下文处理
【发布时间】:2017-12-27 14:23:19
【问题描述】:

我有一个热门的 RxJS Observable,我想根据应用程序的上下文以不同的方式响应它。主题根据指令拦截的一些全局动作发出一个新事件,但是我想要

  • 如果子组件正在订阅主题,则子组件应处理该事件
  • 否则,请使用全局处理程序

我可以从 Subject 获取订阅者的数量,然后如果有多个订阅者,则告诉全局处理程序忽略,但这不是 API 的一部分,所以它似乎可能不是处理它的正确方法。那么正确的做法是什么?

此外,全局事件处理程序应该是指令、服务的一部分,还是应该在新组件中?

【问题讨论】:

  • 全局处理程序本身就是一个观察者?
  • @martin 全局处理程序可以订阅主题。我认为它必须知道发生了一个事件。

标签: javascript angular typescript rxjs


【解决方案1】:

您可以将全局事件主题放在全局 app.service 中,并将其注入其他组件以进行订阅。

虽然理想的组件应该只拥有自己的服务来处理复杂的事件,但有时我觉得直接注入全局服务可以让代码更干净。否则,如果您真的想要完全隔离或者组件应该可以广泛重用,例如 UI 下拉列表,我建议使用 @Output 来触发事件(顺便说一下 Angular EventEmitter 继承 Subject)和 @Input 来接收变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多