0

我阅读了有关如何在 Angular 中使用 NgZone 的文章。但是我仍然无法在第一次执行调用中输入订阅。请帮我解决一下这个。提前致谢 :)

 constructor(private _apicallservice: ApiCallService, private _ngzone : NgZone) {
  this.someMethod();
})

}

  ngOnInit() {
    this.someMethod();
  }

我要执行的方法:

  getEVforMetric() {
  this._apicallservice.getData("report/getmetricIsEVdata").subscribe(data => {
    console.log("EV values returned from API");
    this.isSchVarByReleaseDate = data[0].Value;
    this.isCostVarianceByEv = data[1].Value;
  })
}

我有一个从 API 获取数据的服务。数据正在从 API 返回,但订阅在第一次调用中不起作用,我将这两个值都设为未定义。我知道这是因为 Angular 中的异步调用,所以我像这样将我的方法包装在 NgZone 中,但似乎没有任何效果。

     someMethod() {
      this._ngzone.run(() => this.getEVforMetric())
     }

我为这两个值做了console.log,但它们在第一次调用中未定义,但在订阅了其他一些方法执行数据之后。我希望这些值在第一次调用本身中得到更新。我是Angular的初学者,请帮忙:)

getData() 方法:

getData(url: string){
    let pagedata: any;
    var data = JSON.parse(this._clientcacheservice.getPageCache(PageDataEnum.userInfo));
    let jsonObj: any = data.defaultfilter;
    jsonObj.userId = data.userid;
    let Url = environment.apiUrl + '/api/' + url ;
    pagedata = this.post(Url, jsonObj);
    return pagedata;
}
4

1 回答 1

0

您的获取数据方法没有返回任何可观察到的请更新它

getData(url: string){
        let pagedata: any;
        var data = JSON.parse(this._clientcacheservice.getPageCache(PageDataEnum.userInfo));
        let jsonObj: any = data.defaultfilter;
        jsonObj.userId = data.userid;
        let Url = environment.apiUrl + '/api/' + url ;
        pagedata = this.post(Url, jsonObj);
    return new Observable<string>(observer => {
pagedata.subscribe(response=>{
    observer.next(response);
})
     
      });
        
    } 
于 2020-07-31T09:41:52.633 回答