Angular Typescript getter和setter返回未定义

时间:2020-08-20 11:24:32

标签: angular typescript class properties

我有一个类,我需要该类中的一个属性才能返回对象中的几个字段。 我在.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));
    }

1 个答案:

答案 0 :(得分:0)

假设:

  • 您正在使用HttpClient(@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的输出并通过构造器实例化真实的类。