【问题标题】:Why does component not receive data from service为什么组件没有从服务接收数据
【发布时间】:2020-12-09 12:46:43
【问题描述】:

我想通过服务将数据从一个组件发送到另一个组件并遵循此answer。问题是,接收器组件永远不会接收到数据。我还尝试了question 的解决方案。我为什么会出现问题的另一个想法是我以错误的顺序调用重要的“命令”。据我了解,使用 Observables 时有一个特定的顺序。

  1. 创建 Observable --> private dataSubject = new Subject();
  2. 调用 Observable --> subscribe();
  3. 执行 Observable --> next();
  4. 处置 --> unsibscribe();

StackBlitz

我希望有人能澄清我对 observalbes 的理解是否错误,或者这只是错误。 谢谢!

【问题讨论】:

    标签: angular typescript rxjs


    【解决方案1】:

    您的解决方案中有几个错误。

    • 首先,请始终小心取消订阅销毁时的非 HTTP 可观察对象。
    • 当您想将值推送到主题时,您应该在next() 中提供值。
    • 请注意,在创建第一个订阅后,您始终会跟踪名称,每次提交后,新值都会出现在屏幕上
    • (对于 Cleaner Code 是可选的),当函数有副作用时,它不应返回值(将查询与命令分开)。

    我从你的堆栈闪电战 here 创建了一个工作示例。

    【讨论】:

    • 谢谢!!!服务中销毁的部分对我来说是新的。所以澄清一下:在什么情况下应该这样调用订阅?与“普通” .subscribe 相比,它的优势到底是什么?
    • 当你有一个 HTTP 调用时,Angular 小心自己取消订阅。当您订阅 Observables 以跟踪数据时,您应该始终取消订阅。
    【解决方案2】:

    根据我在您的 stackblitz 示例中发现的内容,您在上述问题的第三部分中遇到了问题。

    3.执行 Observable --> next();

    你并没有执行你的 observable,你需要将值传递给你的 Observable 来执行

    您在服务中所做的事情(在 stackblitz 代码示例中)

    sendName(name) {
      this.nameSubject.next(); // executing empty observable
      return name; // no need of this if you are setting value in observable
    }
    

    你应该做什么

    sendName(name) {
      // notice passing name to observable to execute rather returning
      this.nameSubject.next(name); 
    }
    

    在你的 stackblitz 示例中更新它现在应该可以工作了。

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2017-02-24
      相关资源
      最近更新 更多