[英]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.