早上好,我是 Angular2 的新手,在使用 Observables 和组件时遇到了一些问题
错误要解决
错误错误:找不到类型为“对象”的不同支持对象“[对象对象]”。NgFor 仅支持绑定到 Iterables,例如 Arrays
我有一个 REST 服务,它返回带有某些信息的 JSON,从我创建的组件中,我调用了该服务:
组件.ts
ngOnInit() {
this.getSystems();
}
getSystems(): void {
this.systemService.getSystems()
.subscribe(systems => this.systems = systems);
}
问题是我不是在处理一个信息数组,而是一个对象,所以我不能使用 *ngfor 命令。
组件.html
<li *ngFor="let system of systems">
<a routerLink="/systemDetail/{{system.systemId}}">
<span class="badge">{{system.systemId}}</span>
{{system.host}}
{{system.password}}
{{system.port}}
{{system.rfcDest}}
{{system.userId}}
{{system.version}}
</a>
</li>
根据我的阅读,解决方案是创建一个@Pipe,但我不确定它是如何工作的。有人可以为我澄清一下吗?
JSON
{
"test":
[
{
"host": "h265",
"messagingSystemID": "1",
"password": "xxx,
"port": "50000",
"rfcDest": "testDes",
"systemID": "PPO",
"userId": "TestUser",
"version": "7.5"
},
{
"host": "h455",
"messagingSystemID": "2",
"password": "xxx",
"port": "50000",
"rfcDest": "testDes2",
"systemID": "PPO",
"userId": "TestUser",
"version": "7.5"
}
]
}
预期答案 我的目的是以文本、表格或任何其他可能的方式打印这些系统。但是所有这些。
服务 - 选项 1 这是我尝试做的第一个解决方案
/** GET systems from the server */
getSystems (): Observable<System[]> {
var data = this.http.get<System[]>(this.systemsUrl);
console.log('getSystems service');
console.log(data);
return data;
}
服务 - 解决方案 2 我还尝试通过以下方式进行服务调用:
getSystems(): Observable<System[]> {
let url = 'http://10.8.0.2:50000/integration.experts~web~mappingtesttool/rest/systems';
console.log(url);
return this.http.get(url)
.map(this.extractData);
}
private extractData(res: Response) {
let body = res.json();
console.log("extraData");
return body || { }; // here
}
有人可以告诉我我做错了什么吗?我不在乎我是否使用服务的选项 1 或选项 2。干杯
尝试进行此更改:
说明:响应是表单的对象
但是你想要的是里面的系统数组并且是可迭代的,而不是包含它的对象。
如果它返回一个对象,它通常会给你一个错误,因为它们是异步进程,当你显示它显示它不存在的值时,你应该做的是:
您可以在英文答案中进行更多验证