使用BehaviorSubject将数据从一个组件共享到另一个组件将返回null

时间:2018-10-14 04:17:53

标签: angular mean-stack

我正在尝试使用BehaviorSubject将数据从一个组件共享到另一个组件,但是当我在 Target Component 中订阅了observable时,它将返回 null

这是我的服务等级

 private apiData = new BehaviorSubject<Patient>(null);
 public apiData$ = this.apiData.asObservable();

getSinglePatient(id) {

this.loadToken();
let headers = new HttpHeaders().set('Authorization', this.authToken);
return this.http.get('http://localhost:3000/api/patient/' + id, { headers: 
headers });
}

setData(data) {

  this.apiData.next(data);

}

这是我获取数据的小学班

 getSinglePatient(id: any) {

  this.patientService.getSinglePatient(id).subscribe((data: any) => {
  this.patients = data; //<-- Patients is an Array 
  this.patientService.setData(data);
  this.router.navigate(['/records']);
  console.log(data);

});

这是我的目标类别,我要在其中显示/检索数据

patient: Patient;
constructor(private patientService: PatientService) {

this.patientService.apiData$.subscribe(patient => console.log(patient));
}

这是我的控制台输出

Log

我指的是这个example

不确定这是什么错误,因为这是我第一次这样做。谢谢。

1 个答案:

答案 0 :(得分:1)

分配后,您需要设置 apiData$

setData(data) {
  this.apiData.next(data);
  this.apiData$ = this.apiData.asObservable();
}

编辑:

您不必执行上述操作,只需在app.module级别中配置服务即可。在每个类中都不需要,因为它们每次都会创建一个实例,因此这些值将消失。