我有一个类,我需要该类中的一个属性才能返回对象中的几个字段。 我在.Net中做了几次,但是在Angular中,我正在努力争取返回“未定义”。
我可以确认属性(transLanguageId,transLangDesc,翻译)已填充在IBatchFile上,但没有返回到GET上。甚至没有console.log显示在GETTER中。没有碰到我认为的GETTER代码。
我在这里想念什么?
预先感谢您的帮助。
model.ts
export class translationItem {
id: number;
language: string;
translation: string;
}
export class IBatchFile {
constructor(_transData: translationItem) {
this._transData = new translationItem();
}
private _transData: translationItem;
get transData(): translationItem {
this._transData.id = this.transLanguageId;
this._transData.language = this.transLangDesc;
this._transData.translation = this.translation;
return this._transData;
};
set transData(value: translationItem) {
this._transData.id = value.id;
this._transData.language = value.language;
this._transData.translation = value.translation;
};
transLanguageId: number;
transLangDesc: string;
translation: string;
}
batchdocList.ts
private _batchFileListResults$ = new BehaviorSubject<IBatchFile[]>([]);
public loadDocList(batchid) {
this.urlservice.getBatchFiles(batchid)
.subscribe(result => {
this._batchFileListResults$.next(result); //**result is of class IBatchFile**
this._batchFileListResults$.value.forEach(item => {
console.log(item.transData); //**returns Undefined**
});
}
url.service.ts
getBatchFiles(batchId: number) {
return this.dataservice.getBatchFiles(config.resources.Api.gatewayUri + config.resources.Api.getBatchFiles+"/"+batchId);
}
data.service.ts
getBatchFiles(url:string): Observable<IBatchFile[]> {
return this.http.get<IBatchFile[]>(url)
.pipe(map(response => response))
.pipe(catchError(this.handleError));
}
答案 0 :(得分:0)
假设:
@angular/common/http
):class X
您需要知道它知道http.get<X>
不返回X
类的实例。
字段已正确填充,但原型链未填充。 您可以自己测试(在浏览器DevTools中):
result.constructor //ƒ Object()
比较:
const x = new X();
x.constructor //class X
因此,结果对象中缺少放置在对象原型上的所有项目(如方法和get / set访问器)。
在我的项目中,我将HttpClient.get的返回类型限制为类型(type X
而非class X
)。随着类型被编译掉,您将避免这种怪异。
或者,您可以转换HttpClient.get的输出并通过构造器实例化真实的类。