【发布时间】:2023-03-09 04:27:02
【问题描述】:
我正在尝试从 Angular 服务 hero.service.ts 获取 json 数据。当使用伪造的 http API inMemoryDataService 时,一切正常,我从 in-memory-data.service.ts 文件中获取 json 数据。但是当我尝试从真实的 json 文件中获取数据时,它不起作用,并且我在浏览器中收到错误“找不到集合”。
这是文件内容(所有 3 个文件都位于 app/ 文件夹中):
hero.service.ts :
import { Injectable } from '@angular/core';
import { Headers, Http , Response} from '@angular/http';
import 'rxjs/add/operator/toPromise';
import { Hero } from './hero';
@Injectable()
export class HeroService {
private heroesUrl = 'app/fakeListOfHeroes'; // URL to web api
//private heroesUrl = 'app/heroes.json'; // URL to JSON file
constructor(private http: Http) { }
getHeroes(): Promise<Hero[]>
{
return this.http.get(this.heroesUrl)
.toPromise()
.then(response => response.json().data)
.catch(this.handleError);
}
private handleError(error: any)
{
console.error('An error occurred', error);
return Promise.reject(error.message || error);
}
}
hero.service.ts :
export class InMemoryDataService {
createDb() {
let fakeListOfHeroes = [
{id: 11, name: 'Mr. Nice'},
{id: 12, name: 'Narco'},
{id: 13, name: 'Bombasto'},
{id: 14, name: 'Celeritas'},
{id: 15, name: 'Magneta'},
{id: 16, name: 'RubberMan'},
{id: 17, name: 'Dynama'},
{id: 18, name: 'Dr IQ'},
{id: 19, name: 'Magma'},
{id: 20, name: 'Tornado'}
];
return {fakeListOfHeroes};
}
}
heroes.json :
{
"data": [{
"id": 11,
"name": "Mr. Nice"
}, {
"id": 12,
"name": "Narco"
}, {
"id": 13,
"name": "Bombasto"
}, {
"id": 14,
"name": "Celeritas"
}, {
"id": 15,
"name": "Magneta"
}, {
"id": 16,
"name": "RubberMan"
}, {
"id": 17,
"name": "Dynama"
}, {
"id": 18,
"name": "Dr IQ"
}, {
"id": 19,
"name": "Magma"
}, {
"id": 20,
"name": "Tornado"
}]
}
浏览器出错:
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
您能否尝试在浏览器中打开指向 JSON 文件 (localhost:3004/app/heroes.json) 的 URL?只是看看它是否真的存在!
-
@rinukkusu:是的,它工作正常,json 在那里:imgur.com/K9IzTim
-
错误消息显示 URL 为
null。这很奇怪。也许你需要使用类似stackoverflow.com/questions/37517183/… -
@günter-zöchbauer:我尝试将位置添加到 HeroService 构造函数:
constructor(private http: Http, location: Location) { location.go('/app');}以到达 app 文件夹,但没有成功,这是正确的用法吗?谢谢