我试图找到一个解决方案,以显示我从API接收的整体结果。目前只有一个游戏及其详细信息可以在应用程序中看到。
我的服务看起来像这样:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable, map } from 'rxjs';
import { environment } from 'src/environments/environment';
import { Igameschart } from '../interfaces';
interface IgamesData {
results : [{
name : string,
released : number,
platform : string,
background_image : string,
rating : number
}]
}
export interface IGamesService{
getGames(genre:string):Observable<Igameschart>
}
@Injectable({
providedIn: 'root'
})
export class GamesService implements IGamesService {
constructor(private httpClient: HttpClient) { }
getGames(genre:string):
Observable<Igameschart>{
return this.httpClient.get<IgamesData>(
`${environment.baseUrl}api.rawg.io/api/games?` +
`genres=${genre}&key=${environment.appId}`
) .pipe(map(data => this.tarnsformToIgamesData(data)))
}
private tarnsformToIgamesData(data:IgamesData):
Igameschart{
return {
name: data.results[0].name,
released: data.results[0].released,
platform: data.results[0].platform,
image:data.results[0].background_image,
rating:data.results[0].rating
}
}
}
它以这种方式嵌入到视图中:
<div class="container" *ngIf="gamesloaded">
<div>
<img [src]='gamesloaded.image' height="249px" width="512em">
</div>
<div>
<div id="gdata">{{gamesloaded.name}}</div>
<div id="gdata"> {{gamesloaded.released | date:'fullDate'}}</div>
<div id="gdata"> {{gamesloaded.platform}}</div>
<div id="gdata">{{gamesloaded.rating}}</div>
</div>
</div>
<div *ngIf="!gamesloaded">
<span>No data available</span>
</div>
代码可以在这里找到-〉https://stackblitz.com/edit/angular-cbt8ka
我试图寻找迭代结果的解决方案,但找不到。
2条答案
按热度按时间w8f9ii691#
你需要从你的服务的
tarnsformToIgamesData
方法返回Igameschart
数组,这样你的服务看起来就像那么你的组件应该是
你的HTML将会是
vhipe2zx2#
为要显示的数据创建子组件,在父组件中执行 *ngFor。
在父组件中,您必须有一个空数组来表示数据的数据类型(示例游戏:int [];),在ngOnInit中,您将服务的数据分配给空数组。
超文本标记语言
父组件
在children组件中,您可以单独填充每个游戏的HTML,但是父组件的 *ngFor是在object上循环的。
所以基本上父组件遍历对象数组,子组件显示对象。