簡體   English   中英

角度綁定列表到另一個具有不同屬性名稱的列表

[英]Angular binding list to another list with different property name

我正在按服務獲取對象列表。 這些列表在result.data中。 但是result.data中的對象具有屬性“ Text”和“ Value”。 但我想將列表綁定到具有屬性“標簽”和“值”的數組。 在C#中,我們可以通過Select來做到這一點。 所以我在下面像c#這樣寫。 但是我該如何在帶有角度6的打字稿中做呢?

this.serviceHelper.getStudentTypes().subscribe(
  result => {
    this.studentTypes = result.data
      .Select(p => new SelectItem {//???
      label=p.Text,                //???
      value=p.Value                //???
    });
  }
);

selectItem.ts

export interface SelectItem {
    label?: string;
    value: any;
    styleClass?: string;
    icon?: string;
    title?: string;
    disabled?: boolean;
}

您實際上可以在JS / TS中進行相同的操作,只需要使用map和創建JS對象文字的corect方法:

this.serviceHelper.getStudentTypes().subscribe(
  result => {
    this.studentTypes = result.data
      .map(p => ({
          label:p.Text,                
          value:p.Value                
    }));
  }
);

上面的代碼假定getStudentTypes返回一個Observable<{ Text: string, Value: string }[]>或類似的東西。

編輯

由於您希望新數組的類型為SelectItem[]您可以根據需要在map顯式指定它(這有助於某些錯誤的錯誤消息),但這不是必需的。 如果this.studentTypes鍵入為SelectItem[]並且map的返回值與SelectItem兼容,則所有操作都將按預期工作(由於SelectItem是接口而不是類,我們可以將任何兼容的對象常量分配給該類型的變量, 打字結構性打字的方式)

明確返回SelectItem[]map的顯式版本為:

this.serviceHelper.getStudentTypes().subscribe(
  result => {
    this.studentTypes = result.data
      .map<SelectItem>(p => ({
          label:p.Text,                
          value:p.Value                
    }));
  }
); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM