2017-08-08 29 views
0

我的web服務返回一堆對象,我想在我的Angular服務將它們發送到使用組件之前,通過將「狀態」字段更改爲其他對象來操縱這些對象。在Angular中,如何在我的http get返回它們之前操作我的結果對象?

我試圖通過與地圖數組迭代,並與翻譯現場更換的領域,但似乎並沒有工作(即使執行console.log表明job.state確實發生了改變):

return this.http 
     .get(this.jobsUrl, options) 
     .map(res => { 
      console.log(job.state); //shows original value 
      res.json().jobs.map((job) => job.state = this.stateTranslation[job.state]); 
      console.log(job.state); //shows translated value 
      return res.json().jobs as Job[]; 
     }) 
     .catch(this.handleError); 

也許地圖只是返回一個「工作」的副本,並且原始對象沒有真的被修改?

回答

2

創建2張地圖。 1轉換爲JSON,另一個循環遍歷數組。這增加了可讀性。您遇到的問題是您撥打res.json兩次,這意味着您對第一個數組所做的更改永遠不會到達第二個數組。

return this.http 
    .get(this.jobsUrl, options) 
    .map(res => res.json().jobs as Job[]) 
    .map((job: Job) => { 
     job.state = this.stateTranslation[job.state]); 
     return job; 
    }) 
    .catch(this.handleError); 
0

你應該地圖後返回結果,並改變它在陣圖回調狀態後返回工作:

return this.http 
     .get(this.jobsUrl, options) 
     .map(res => { 
      let ret = res.json().jobs.map((job) => { 
       job.state = this.stateTranslation[job.state]; 
       return job; 
      }); 
      return ret as Job[]; 
     }) 
     .catch(this.handleError); 
相關問題