将数据从服务可观察函数传递到一些无关的组件

时间:2019-11-14 13:38:00

标签: angular typescript observable

service.ts

@Injectable({
  providedIn:'root'
})

export class textAppService{
  constructor(private http: HttpClient){}

  getPersonDetail(id:any):Observable<any>{
    return id? this.http.post(ur;, {id:id}):of(new personDetails());
  }
}

·     因此,我想将从getPersonDetail()方法获得的数据传递给其他一些非关系componenet ts文件,由于时间原因,我无法调用getPersonDetail()服务来执行此操作。所以我该怎么做。我能否将从getPersonDetail获得的数据设置为全局对象,以便可以在多个componenet中使用?

2 个答案:

答案 0 :(得分:1)

您可以使用BehaviorSubject检测更改。

创建如下服务:

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

@Injectable({
  providedIn: 'root'
})
export class DetectPersonChangeService {

constructor() { }

public status: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);

  changeData(value: any) {
    this.status.next(value);
  }

}

getPersonDetail()上,致电服务,

this.DetectPersonChangeService.changeData(data);

并检测无关组件的变化:

this.DetectPersonChangeService.status.subscribe((val) => {
    console.log(val)
});

答案 1 :(得分:0)

有多种方法可以实现您想要的。最简单的选择是将数据缓存在某个变量中,并检查是否已经为给定的ID设置了数据,然后从缓存中返回而不是进行调用。 您甚至可以使用拦截器来缓存数据并防止污染您的服务调用。 请参考此链接以获取示例Link