我想在我的 http 模型中添加和填充其他欄位(不是由后端服務發送的)。問題是我無法在收到 http 回應的地方填充(映射)這些欄位,因為我使用的是內部框架。
Typescript (Angular) 是否有可能以某種方式覆寫 JSON 反序列化流/實體創建并填充提到的欄位。例如:
interface ElectricDevice {
energy_meter_start: number; // received from backend service
energy_meter_stop: number; // received from backend service
energy_spent: number; // not received by backend service, but needs to be populated as energy_meter_stop - energy_meter_start
// ...
/* I would like to somehow populate energy_spent as energy_meter_stop-energy_meter_end on instance creation (deserialisation) */
}
uj5u.com熱心網友回復:
您需要一個HttpInterceptor,您可以在其中操作資料。
@Injectable()
export class CustomJsonInterceptor implements HttpInterceptor {
constructor(private jsonParser: JsonParser) {}
intercept(httpRequest: HttpRequest<any>, next: HttpHandler) {
if (httpRequest.responseType === 'json') {
// If the expected response type is JSON then handle it here.
return this.handleJsonResponse(httpRequest, next);
} else {
return next.handle(httpRequest);
}
}
在教程中閱讀更多相關資訊:https : //angular.io/api/common/http/HttpInterceptor
uj5u.com熱心網友回復:
我已經向您詢問了您的服務的特定名稱。
但是,與此同時,我對你的問題給出了一個“一般”的答案。你只需要這樣做:
this.yourService.yourGetElectriceDevices
.pipe(
map (_resp: ElectricDevice => _resp.energy_spent = _resp.energy_meter_stop - _resp.energy_meter_start
)
.subscribe( resp => { //your treatment to the response });
以上僅適用于快速測驗。如果你想做一些更“詳細”的事情,你可以將你的界面轉換成一個類,并添加你的計算屬性,如下所示:
export interface ElectricDevice {
energy_meter_start: number; // received from backend service
energy_meter_stop: number; // received from backend service
}
export Class ElectricDeviceClass {
energy_meter_start: number;
energy_meter_stop: number;
energy_spent: number;
constructor (data: ElectricDevice) {
this.energy_meter_start = data.energy_meter_start;
this.energy_meter_stop= data.energy_meter_stop;
this.energy_spent = this.energy_meter_stop - this.energy_meter_start;
}
要使用它,只需:
import { ElectricDeviceClass, ElectricDevice } from './../model/...' // There where you have yours interfaces and model classes
this.yourService.yourGetElectriceDevices
.pipe(
map (_resp: ElectricDevice => new ElectricDeviceClass(_resp)
)
.subscribe( resp => { //your treatment to the response });
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/376638.html
下一篇:報錯注入(extractvalue的利用,空格,=,and被過濾,left()和right()的利用)——[極客大挑戰 2019]HardSQL 1
