返回未定义的Angular Typescript getter和setter
我有一个类,我需要该类中的一个属性来返回对象中的几个字段。 我在.Net中做过几次,但在Angular中,我正在与返回的“未定义”进行斗争 我可以确认属性(transLanguageId、transLangDesc、translation)已填充到IBatchFile中,但不会在GET中返回。GETTER中甚至没有显示console.log。我想是没有达到GETTER代码 我错过了什么 提前感谢您的帮助 model.ts返回未定义的Angular Typescript getter和setter,angular,typescript,class,properties,Angular,Typescript,Class,Properties,我有一个类,我需要该类中的一个属性来返回对象中的几个字段。 我在.Net中做过几次,但在Angular中,我正在与返回的“未定义”进行斗争 我可以确认属性(transLanguageId、transLangDesc、translation)已填充到IBatchFile中,但不会在GET中返回。GETTER中甚至没有显示console.log。我想是没有达到GETTER代码 我错过了什么 提前感谢您的帮助 model.ts export class translationItem { id
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**
});
}
data.service.ts
getBatchFiles(batchId: number) {
return this.dataservice.getBatchFiles(config.resources.Api.gatewayUri + config.resources.Api.getBatchFiles+"/"+batchId);
}
getBatchFiles(url:string): Observable<IBatchFile[]> {
return this.http.get<IBatchFile[]>(url)
.pipe(map(response => response))
.pipe(catchError(this.handleError));
}
getBatchFiles(url:string):可观察{
返回此.http.get(url)
.pipe(映射(响应=>响应))
.pipe(catchError(this.handleError));
}
假设:
- 您正在使用HttpClient(
):@angular/common/http
- 您有
X类
http.get
不会返回X
类的实例
字段已正确填充,但原型链未正确填充。
您可以自己测试(在浏览器开发工具中):
将其与:
const x = new X();
x.constructor //class X
因此,结果对象中缺少放置在对象原型上的任何项(如方法和get/set访问器)
在我的项目中,我限制了HttpClient.get的返回类型(typex
而不是classx
)。随着类型被编译掉,您将避免这种奇怪
或者,您可以转换HttpClient.get的输出,并通过constructor实例化实际类。Hi,为了简单起见,我在示例中使用了“result”,但实际上使用了声明的BehaviorSubject。我更新了代码以显示其声明,并将结果替换为behaviorSubject作为要迭代的对象数组。然而,无论我使用“result”还是声明的behaviorSubject,都会发生这种情况。顺便说一句,我正在使用httpClient是的。所有的数据都存在,除了当我使用“GET”时。明白,但这不会改变我的答案。您认为是IBatchFile实例的对象没有设置原型链,因此缺少方法和访问器。你做了我描述的支票了吗?我想我在跟踪你。因此,我添加了一些代码来显示数据是如何映射到数据中的。服务。ts
。管道(map(response=>response))
没有做任何事情,但它是设置断点检查数据的正确位置,如果需要的话,可以添加类的映射,因此我最终在webApi中的模型内部创建了对象,并确保模型中所有webApi返回的项都具有相同的名称,并且都存在于角度模型中。我现在更加了解映射,因为我不知道这个原型对象。花了一些时间,但谢谢你们指出了正确的方向。另外,要理解,如果它没有相同的名称,那么实际上应该在角度一侧映射它们。
const x = new X();
x.constructor //class X