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

Angular 将数据从服务可观察函数传递到一些不相关的组件,angular,typescript,observable,Angular,Typescript,Observable,服务台 @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()); } } @可注入({ prov

服务台

@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());
  }
}
@可注入({
providedIn:“根”
})
导出类textAppService{
构造函数(私有http:HttpClient){}
getPersondeail(id:any):可观察{
返回id?this.http.post(ur;,{id:id}):of(newPersonDetails());
}
}
·
因此,我想将从getPersonDetail()方法获得的数据传递到其他一些非关系组件的ts文件,由于时间效率的原因,我无法调用getPersonDetail()服务来实现这一点。那我该怎么办呢。我是否能够将从getPersonDetail获取的数据设置为全局对象,以便可以在多个componenet中使用它?

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

您可以使用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);
  }

}
以及检测不相关成分的变化:

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