我最近进入Angular和TypeScript并试图学习一些东西,并找到了一个可以尝试的特定项目(如果有人想查看该项目,我可以在链接中进行编辑)(尝试从中读取json数据宠物小精灵api)
此行中的“对象”类型上不存在属性“地图”。
.then(items => items.map((item, idx) =>
这是完整的代码
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class PokedexService {
private baseUrl: string = 'https://pokeapi.co/api/v2/pokemon/';
private baseSpriteUrl: string = 'https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/';
constructor(private http: HttpClient) { }
getPokemon(offset: number, limit: number) {
return this.http.get(`${this.baseUrl}?offset=${offset}&limit=${limit}`)
.toPromise()
//.then(response => response.json().results)
//.map((results = > response.json()))
.then(items => items.map((item, idx) => {
const id: number = idx + offset + 1;
return {
name: item.name,
sprite: `${this.baseSpriteUrl}${id}.png`,
id
};
}));
}
}
当我尝试运行项目时,我首先收到此脚本的json部分(对象上不存在json)的错误,然后我了解到使用新更新不需要这些行,因此我将它们注释掉。 (不知道是对是错)之后,我得到了我现在要问的错误。
我希望我没有做错任何事情,并等待任何指导。 再说一次,我是这个领域的新手,但是会编码。
答案 0 :(得分:0)
如果您声明返回的值(即Items []),则可以运行.map 通常,API服务和组件之间是分开的,所以看起来像这样:
api.service.ts
public GetPokemon(): Observable<Items[]> {
const url = this.url_to_backend_method;
return this.http.get<Items[]>(url)
.pipe(catchError(this.handleError));
}
component.ts
private getPokemon() {
this.api.GetPokemon().subscribe(
items => items.map((item, idx) => {
** run your logic here **};
}, error => {
** deal with error here **
});
}
希望这会有所帮助