#c# #angular #rxjs
Вопрос:
Я работаю над проектом Angular, я пытаюсь заполнить свойство дочернего объекта его родителями с помощью оператора rxjs. Объекты выглядят так
[
{idSite:1,siteName:"Site of First Enseigne", enseigneId:1,enseigne: null},
{idSite:1,siteName:"Site of Second Enseigne", enseigneId:2,enseigne: null},
]
[
{idEnseigne:1,name:"First Enseigne", sites:[]},
{idEnseigne:2,name:"Second Enseigne", sites:[]},
]
Я хотел бы получить сайты с их описаниями:
[
{
idSite:1,
siteName:"Site of First Enseigne",
enseigneId:1,
enseigne: {idEnseigne:1,name:"First Enseigne", sites:[]}
},
{
idSite:1,
siteName:"Site of Second Enseigne",
enseigneId:2,
enseigne: {idEnseigne:2,name:"Second Enseigne", sites:[]}
},
]
Я пользуюсь сервисом сайта
fetchAllSites() : Observable<Site[]>{ // which request all site in my API
let url = `${this.provider}all`;
return this.http.get<Site[]>(url);
}
И услуга enseigne, которая работает как услуга сайта
Я попытался заполнить все значения сайта из fetchAllSites этим методом, но, возможно, я делаю это неправильно
export class DashboardComponent implements OnInit, {
sites!: Site[]
enseignes!: Enseigne[]
ngOnInit(): void {
this.LoadTabcomponent();
}
LoadTabcomponent(){
this.siteService.fetchAllSites().pipe(
map(sites => {
sites.map( site => {
this.enseigneService.getEnseignes().pipe(
map( enseignes => {
enseignes.map( enseigne => {
if(site.enseigneId === enseigne.idEnseigne){
site.enseigne = enseigne
}
})
})
)
})
})
)
}
}
Мой веб-API на c#, я должен получить полный объект из API, но он не поддерживает сериализацию, потому что мне нужно завершить еще один объект, чтобы получить то, что я хочу, поэтому я пытаюсь создать объект в веб-приложении.
Ответ №1:
Вы можете попробовать использовать операторы combineLatest
или forkJoin
для объединения обоих результатов, например:
combineLatest([
this.siteService.fetchAllSites(),
this.enseigneService.getEnseignes()
]).pipe(
map([sites, enseignes] => {
... you merge code here
})
).subscribe((sites)=> this.sites = sites);
Комментарии:
1. Спасибо за совет, решение хорошо работает с combineLatest и forkJoin. Я хотел бы добавить, что результат оператора будет недействительным, поэтому подписаться на значение, которое у меня было
.subscribe((sites) => this.sites = sites as unknown as Site[]