订阅不工作angular2

时间:2017-09-11 05:28:56

标签: javascript angular2-services

我有一个angular2程序,我想在另一个组件上点击时更新组件的数据。我已经提供了一项服务,其中我有两种方法,一种用于更新数据,另一种用于获取数据。

我的服务如下

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';


@Injectable()
export class DataserviceService {

    public subject = new Subject<any>();

    sendMessage(message: any) {
      debugger;
        this.subject.next({ text: message });
    }

    clearMessage() {
        this.subject.next();
    }

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

在我的组件a中进行点击。我有这个功能来更新数据。

onClick()
    {
       this._dataserviceService.sendMessage(this.getJsonData());
    }

在组件b中,我已经按照这种方式订阅了它。

 ngOnInit() {
debugger;
     this.subscription = this._dataserviceService.getMessage().subscribe(message => { this.message = message;
     console.log(this.message)
     debugger;
    });
  }

如果我在同一个组件中进行订阅,它可以正常工作,但在其他组件中它不会更新任何数据。 任何帮助将不胜感激。

修改 据我所知,主要问题是我的订阅者组件在服务初始化后正在加载。

1 个答案:

答案 0 :(得分:1)

尝试通过以下方式替换你的getMessage()函数:

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

现在看来,你的getMessage()没有返回一个observable对象,这可以解释为什么subscribe方法无效。