在 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);
我的 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);