角度主题订阅无效

时间:2017-09-20 13:38:12

标签: angular rxjs

我有服务 - >

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

和组件 - >

package myclass;

public class c_myclass {

    // class variable
    String classvar;

    // constructor
    public c_myclass(String arg) {
        // do stuff
    }

    // class function
    public void classfunc(String arg) {
        // do stuff
    }

}

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

plunker example

3 个答案:

答案 0 :(得分:11)

observable可能在组件订阅之前从构造函数触发。因此该组件错过了该消息。

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

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

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

或者你可以查看BehaviorSubject,它将保留最新的值,并在订阅它时立即给它。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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