如何在从http请求获取对象之后从对象中转换多个字符串,然后使用转换后的字符串存储该对象
问题描述:
我正在从http请求获取对象。我使用put方法通过另一个http请求存储该对象。我想在存储该对象之前使用Google翻译API将该对象中的一些字符串翻译为不同的语言。我怎样才能做到这一点。如何在从http请求获取对象之后从对象中转换多个字符串,然后使用转换后的字符串存储该对象
service.ts
import { Injectable } from '@angular/core'; import { HttpClient, HttpErrorResponse } from '@angular/common/http'; import { Observable } from 'rxjs/Rx'; import { BaseApi } from '../../../../laas/base-api.service'; import { ApplicantService } from '../../../../laas/applicant.service'; import { environment as ENV } from '../../../../../environments/environment' @Injectable() export class NregaService { private applicantId: string; private baseUrl: string; constructor( private http: HttpClient, private api: BaseApi, private applicant: ApplicantService ) { this.applicantId = applicant.getApplicantID() this.baseUrl = `/applicants/${this.applicantId}/id/nrega`; } get() { return this.api.newGet(this.baseUrl); } save(type, data) { return this.api.put(this.baseUrl, { type: type, data: data }); } translate(q) { const translateUrl = ENV.googleAddress.translateUrl; const apiKey = ENV.googleAddress.apiKey; const target = 'en'; const model = 'base'; return this.http.post(`${translateUrl}${apiKey}`, { q, target, model }).map(res => { const value = res['data'].translations[0]; console.log(`Translated ${q}:`, value); return value.translatedText; }); } verify(id) { return this.api.post('nrega', { jobcardid: id }).map(result => { if (typeof result === typeof '') { throw result; } const incomes = []; if (result.incomeDetail) { result.incomeDetail .sort((a, b) => a.year <= b.year ? -1 : 1) .forEach(income => incomes.push({ income: income['income(Rs.)'], year: income.year })); } const details = []; if (result.applicantDetail) { result.applicantDetail.forEach(detail => details.push({ name: detail.name, gender: detail.gender[0].toLowerCase(), age: detail.age, bankOrPostOffice: detail.bankorpostoffice, aadhaarNo: detail.aadhaarNo, accountNo: detail.accountNo })); } const data = { jobCardId: result.jobcardno, regDate: result.dateOfRegistration, photo: result.photoImageUrl, voterId: result.voterId, fatherOrHusband: result.nameOfFatherOrHusband, family: { ids: [result.familyId1, result.familyId], members: details, head: result.nameOfHead, isBpl: result.bplFamily.toLowerCase() === 'yes' ? true : false, bplId: result.bplFamilyId, }, address: { full: result.address, village: result.village, district: result.district, panchayat: result.panchayat, block: result.block }, category: result.category, incomes: incomes, }; console.log('NREGA: ', data); return data; }); } }
如果我使用也许是因为我没有使用.subscribe方法(我使用的部件,其中翻译方法翻译服务字符串本身然后我得到错误我在调用服务的verify()方法。在将数据返回到组件之前,是否可以将多个字符串转换为服务本身?
答
我认为您要查找的是Rxjs 地图运营商。
首先,在你的service.ts文件中导入这个操作符。
import 'rxjs/add/operator/map';
然后,如果我得到了你的观点,你要当你的组件调用get方法,该数据已经从服务器,但收到后翻译一些字符串之前,该方法已发送的数据回组件。
组件> service.get()> HTTP服务器从接收到的请求>数据>翻译送到部件
如果我是正确的,唯一的事情,你必须>数据做的是使用地图操作:
get() {
return this.api.newGet(this.baseUrl)
.map(data => this.translate(data));
}
让我们想象一下一个SourceData类型和ModifiedData类型。地图运算符将让您返回Observable<ModifiedData>
而不是您用于发回的Observable<SourceData>
。查看文档here以获得更好的解释。
请注意,您也可以在调用保存方法时进行翻译。
save(type, data) {
data = this.translate(data)
return this.api.put(this.baseUrl, { type: type, data: data });
}