我有一个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;
});
}
如果我在同一个组件中进行订阅,它可以正常工作,但在其他组件中它不会更新任何数据。 任何帮助将不胜感激。
修改 据我所知,主要问题是我的订阅者组件在服务初始化后正在加载。
答案 0 :(得分:1)
尝试通过以下方式替换你的getMessage()函数:
getMessage(): Observable<any> {
return this.subject.asObservable();
}
现在看来,你的getMessage()没有返回一个observable对象,这可以解释为什么subscribe方法无效。