无法从服务向组件订阅数据

时间:2019-09-05 20:12:44

标签: javascript angular typescript angular7 angular-routing

我正在尝试从服务中获取数据到下面的组件即我的服务

Service.ts

export class PrjService {
  tDate: Observable<filModel[]>;
  prjData:Observable<filModel[]>;
entityUrl;
constructor(){
this.entityUrl = 'PrjDetail/GetByRep';
    this.tDate = service.get<ShipDateFilterModel[]>(this.entityUrl);
}

我尝试检索的组件如下所示

export class RFComponent implements OnInit {
  cachedResults: any[];
  shipToData: any;

constructor(private psService: PrjService)
{}
  ngOnInit() {
     this.psService.tDate.subscribe(x => this.cachedResults = x);
     this.filterData = [...new Set(this.cachedResults.map(item => item.cus_name))].filter(Boolean);
  }

每当对服务进行调用this.cachedResults时,都未定义,并且在下面出现错误,如我尝试过滤的地方

  

错误TypeError:无法读取未定义的属性“地图”

不确定我在这里缺少什么

1 个答案:

答案 0 :(得分:1)

由于您正在进行异步调用,因此当控件到达?语句时,不会从服务中获取filteredData的值。这就是cachedResults错误的原因。

要解决此问题,您必须在服务调用完成后执行 语句,并返回数据作为响应。

undefined

另一种方法是使用Observable对象的 ngOnInit() { this.psService.tDate .subscribe(x => { this.cachedResults = x; this.filterData = [...new Set(this.cachedResults.map(item => item.cus_name))].filter(Boolean); }); } 方法。

finally

在这里, ngOnInit() { this.psService.tDate .finally(() => { this.filterData = [...new Set(this.cachedResults.map(item => item.cus_name))].filter(Boolean); }) .subscribe(x => { this.cachedResults = x; }); } 方法在可观察的完成之后或发生错误时被调用。