返回未定义的Angular Typescript getter和setter

返回未定义的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

我有一个类,我需要该类中的一个属性来返回对象中的几个字段。 我在.Net中做过几次,但在Angular中,我正在与返回的“未定义”进行斗争

我可以确认属性(transLanguageId、transLangDesc、translation)已填充到IBatchFile中,但不会在GET中返回。GETTER中甚至没有显示console.log。我想是没有达到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**
    });
}

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