将空的json数组映射到对象

时间:2019-08-06 21:42:44

标签: json angular angular2-services

我有一个api调用,返回一个json消息。消息中的变量之一是对象数组,有时该数组为空,但是需要该数组中的数据,以便可以将其二维方式绑定到HTML代码中的角度材质元素。我需要解决该对象数组为空时的情况,因为数组未定义,所以DOM元素不会出错。它应该只将那些角形材料元素留为空白。 (我想在元素上不使用nfIf来执行此操作,因为它们仍应显示。)

当前设置名称变量的代码的方式不是绑定到变量的2向数据,因为它不会被更新。

我已经尝试过使用Elvis运算符,但是那些不适用于[(ngModel)]。我可以用[ngModel] =“ array?.value”进行绑定,但不能更新。添加(ngModelChange)=“ datasource?.value?= $ event”,因为'?'不起作用是一个意外的令牌。 在JSON映射方面我能做些什么?

service.ts

GetData(identificationNum: string): Observable<DATA_OBJECT>{
    return this.http.get<DATA_OBJECT>(this.service.apiAddress + 'api/GetData/' + identificationNum)
    .pipe(
        map(
            jsonObj => Object.assign(new DATA_OBJECT(), jsonObj)
        )
    );
}

datastructuresmodels.ts

export class DATA_OBJECT
    {
        public header: Object ;
        public identificationNum: string  ;
        public infoArray: Array<Info> ;

    }

export class Info
    {
        public name: string;
        public address: string  ;
        public gender: string ;
    }

component.ts

data: DATA_OBJECT;
dataSource: Info[];

ngOnInit() {
this.service.GetStowData(this.number).subscribe(
        (data: DATA_OBJECT) => (this.data = data),
        error => console.log(error),
        () => {
          this.dataSource = this.data.infoArray;
        }
      );
}

component.html

<div class="col">
                <p class="subheading">Name: </p>
                <mat-form-field>
                  <input matInput placeholder="Name" 
                                  [ngModel]="datasource?.name">
                </mat-form-field>
              </div>

JSON问题示例:

{     "header": {         "messageCode": 00,         "status": 0,},     "identificationNum": 123, "infoArray": [] }

填充的JSON示例(由于存在该信息,因此可以发挥所需功能):

{     "header": {         "messageCode": 00,         "status": 0,},     "identificationNum": 123, "infoArray": [{"name":"string"}, {"address":"string"}, {"gender":"string"}] }

即使api用空数组响应,预期结果也是空角材料元素。

0 个答案:

没有答案