为了账号安全,请及时绑定邮箱和手机立即绑定

无法将数据从服务订阅到组件

无法将数据从服务订阅到组件

沧海一幻觉 2021-10-07 10:08:23
我正在尝试从服务中获取数据到下面的组件是我的服务服务.tsexport 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是未定义的,我在下面收到错误,就像我试图过滤的地方错误类型错误:无法读取未定义的属性“地图”不确定我在这里缺少什么
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

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


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


 ngOnInit() {

     this.psService.tDate

     .subscribe(x => {

        this.cachedResults = x;

        this.filterData = [...new Set(this.cachedResults.map(item => item.cus_name))].filter(Boolean);

     });

  }

另一种方法是使用finallyObservable 对象的方法。


 ngOnInit() {

        this.psService.tDate

        .finally(() => {

             this.filterData = [...new Set(this.cachedResults.map(item => item.cus_name))].filter(Boolean);

         })

        .subscribe(x => {

           this.cachedResults = x;

        });

    }

在这里,该finally方法在 observable 完成后或发生错误时调用。


查看完整回答
反对 回复 2021-10-07
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信