在Angular中,如何在http get返回之前操作结果对象?

时间:2017-08-08 13:24:04

标签: javascript angular angular-http

我的Web服务返回一堆对象,我希望在Angular服务将它们发送到使用组件之前,通过将“state”字段更改为其他对象来操纵这些对象。

我已尝试使用地图迭代数组并将字段替换为已翻译的字段,但这似乎不起作用(即使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);

也许map只返回“job”的副本,并且原始对象实际上没有被修改?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);