在 Angular 中,如何在我的 http 获取 returns 之前操作我的结果对象?

In Angular, how can I manipulate my result objects before my http get returns them?

我的 Web 服务 returns 一堆对象,我想在我的 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);

也许映射只是 returns "job" 的副本,而原始对象并没有真正被修改?

您应该 return 映射后的结果和 return 在数组映射回调中更改其状态后的作业:

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);

制作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);