【问题标题】:Angular subject subscription is not workingAngular 主题订阅不起作用
【发布时间】:2019-09-19 02:36:12
【问题描述】:

我有一个服务->

subject = new Subject<any>();

  constructor (){
    this.subject.next('hello');
  }

  getsubject():Observable<any>{
    return this.subject.asObservable();
  }

和组件->

name:string;
  subscription : Subscription;
  constructor(private serv:SService) {
    this.subscription=this.serv.getsubject().subscribe(message=>{console.log('hello');});
  }

如您所见,我正在将 hello 消息从服务传递给订阅者,但在组件中订阅者没有获得该值,即使它没有记录任何单词。

plunkerexample

【问题讨论】:

  • 尝试使用nextsubject获取值
  • @N1gthm4r3 看到这个关于问题的答案就像你的问题stackoverflow.com/a/43374509 可以解决这个问题

标签: angular rxjs


【解决方案1】:

observable 可能在组件订阅它之前从构造函数中触发。所以组件错过了消息。

不要将 this.subject.next('hello') 放在构造函数中,而是创建一个方法。

  sendMessage (){
    this.subject.next('hello');
  }

然后您可以从组件中调用 this.serv.sendMessage(),它已经被订阅了。

或者,您可以查看 BehaviorSubject,它将保留最新的值,并在有人订阅它时立即提供。

【讨论】:

    【解决方案2】:

    它的工作。 plunker 您需要添加此代码。因此,如果当时没有人订阅它,主题将发出价值,没有人会知道它发出了价值。当有人订阅时,它不会发出最后一个值(BehaviorSubject 会)。

     passToServ() {
       this.subject.next(2);
     }
    

    【讨论】:

      【解决方案3】:

      如果您的订阅者是组件文件,原因之一可能是忘记在应用程序的某处添加组件的选择器。例如,您必须在 app.component.html 中注册组件。

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 2020-12-13
        • 2018-08-14
        • 1970-01-01
        • 2020-09-17
        • 2017-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多