代码之家  ›  专栏  ›  技术社区  ›  N1gthm4r3

角度主题订阅不起作用

  •  13
  • N1gthm4r3  · 技术社区  · 9 年前

    我有一项服务->

    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消息从服务传递给订阅者,但在组件中订阅者并没有得到那个值,即使它并没有记录任何文字。

    普朗克 example

    3 回复  |  直到 9 年前
        1
  •  15
  •   bgraham    9 年前

    可观察对象可能在组件订阅它之前从构造函数激发。因此,该组件错过了消息。

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

    然后你可以称之为this。服务。sendMessage(),它将已被订阅。

    或者,您可以研究行为主体(BehaviorSubject),它将保留最新的值,并在有人订阅它时立即给出它。

        2
  •  2
  •   alexKhymenko    9 年前

    它正在工作。 plunker 您需要添加此代码。所以,若当时并没有人订阅该主题,那个么该主题将发出值,并没有人会知道它发出了值。当有人订阅时,它不会发出最后一个值(行为主体会)。

     passToServ() {
       this.subject.next(2);
     }
    
        3
  •  1
  •   enyoucky    7 年前

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

    推荐文章