Может быть, простой вопрос, но я не мог найти пример для этого.
Это мой вызов HttpClient
getItems(dataSourceUrl: string, bindKey: string, bindValue: string): Observable<SelectItem[]> {
return this.httpClient.get<Array<any>>(dataSourceUrl);
}
Я хочу сопоставить результат списка с SelectItem[] на основе bindKey
и bindValue
. Как я могу это сделать?
Я пробовал что-то вроде этого
return this.httpClient.get<Array<any>>(dataSourceUrl).pipe(map(x=> { return { label: data.bindKey, value: data.bindValue } }));
Интерфейс
export interface SelectItem {
label: string;
value: any;
}
Пример двух разных ответов API
1.
{key:'Istanbul', value: 'Test' }
{key:'London', value: 'Test' }
bindKey
будет key
bindValue
будет value
2.
{name:'Istanbul', id: 'Test' }
{name:'Istanbul', id: 'Test' }
bindKey
будет id
bindValue
будет name
Можете ли вы показать нам, что такое интерфейс SelectItem
и что такое ответ API. В общем коде я также не вижу data
объекта, который вы используете как data.bindKey
. Я что-то пропустил ? Лучше всего было бы поделиться API
ответом и ожидаемым ответом после подачи заявки map
@ShashankVivek ответ API может быть списком любого типа. Вот почему я хочу отобразить его динамически, на основе bindKey , bindValue - оба они являются свойствами элементов из ответа API списка Пример двух ответов API {ключ: «Стамбул», значение: «Тест»} {имя: «Стамбул» ', id: 'Test' } bindKey будет: key, id. bindValue будет именем, значением.
Пытаться
getItems(dataSourceUrl: string, bindKey: string, bindValue: string): Observable<SelectItem[]> {
return this.httpClient.get<SelectItem[]>(dataSourceUrl)
.pipe(map(x=> this.transformValue(bindKey,bindValue,x)));
}
transformValue(bindKey,bindValue,response):SelectItem[]{
const newResponse = [];
response.forEach(data => {
newResponse.push({
label: data[bindKey],
value: data[bindValue]
})
})
return newResponse;
}
Как-то я подумал, что .map может делать это автоматически без forEach
Я использую декораторы typestack/class-transformer для преобразования простых объектов в экземпляры классов и наоборот. Я рекомендую вам ознакомиться с