【问题标题】:Angular 9 how to map 1 object to anotherAngular 9如何将1个对象映射到另一个
【发布时间】:2021-09-20 16:49:38
【问题描述】:

我有一个角度服务,它从后端返回一个 Observable,定义为:

GetAllMyResponses(): Observable<ResponsesGridResult> { ..... }

模型的声明方式如下:

export class GridResult {
   a: string;
   b: Date;
   c: string;
   d: string;
}

export class ResponsesGridResult {
   public rowCount: number;
   public summaries: GridResult[];
}

所以现在当我从我的组件中使用我的方法时,我会这样做:

private getResponsesSubscription : Subscription;
....
.....

this.getResponsesSubscription = this.myservice.GetAllMyResponses()
  .pipe(delay(500))
  .subscribe((result) => {
   this.selected = result.summaries;
});

我的问题是

this.selected

声明为选中:responseSummary[] = [];

是在表单中声明的​​不同类型:

 export class responseSummary {
       a: string;
       b: Date;
       c: string;
       d: string;
       e: string;
       f: string;
    }
 export class ResponsesSummaryGridResult {
       public rowCount: number;
       public summaries: responseSummary [];
    }

responseSummary 对象包含 GridResult 中的所有属性名称以及额外名称。

所以我不能这样做 this.selected = result.summaries,因为返回的对象与我尝试设置的对象不同。有没有办法将一个对象映射到另一个对象上?我不能将 selected 声明为同一类型,因为它已在系统的其他部分使用。

【问题讨论】:

    标签: angular


    【解决方案1】:

    一种可能性是像这样映射您的数组:

    this.getResponsesSubscription = this.myservice.GetAllMyResponses()
      .pipe(delay(500))
      .subscribe((result) => {
       this.selected = result.summaries.map( summary => 
        ({...summary, e: 'value', f: 'value'}) as responseSummary
       )
      });
    

    如果ef 可以是undefined,则将它们标记为:

    export class responseSummary {
       a: string;
       b: Date;
       c: string;
       d: string;
       e?: string;
       f?: string;
    }
    

    这会将上面显示的代码简化为:

    this.selected = result.summaries as responseSummary;
    

    顺便说一句,在您的示例中,您将GridResultresponseSummaryResponsesSummaryGridResult 定义为类。 Do you need to do so?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      相关资源
      最近更新 更多