我有一個spring-data-rest存儲庫,生成一個hal + json對象,我希望我的Angular 2前端能夠接收和顯示。從Angular 2中的Hal + JSON對象解析信息
哈爾+ JSON對象:
{
"_embedded" : {
"users" : [ {
"name" : "Bob",
"_links" : {
"self" : {
"href" : "http://localhost:4200/api/users/1"
},
"user" : {
"href" : "http://localhost:4200/api/users/1"
}
}
}, {
"name" : "Joe",
"_links" : {
"self" : {
"href" : "http://localhost:4200/api/users/2"
},
"user" : {
"href" : "http://localhost:4200/api/users/2"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://localhost:4200/api/users"
},
"profile" : {
"href" : "http://localhost:4200/api/profile/users"
},
"search" : {
"href" : "http://localhost:4200/api/users/search"
}
},
"page" : {
"size" : 20,
"totalElements" : 2,
"totalPages" : 1,
"number" : 0
}
}
我有,做一個GET請求到該API的服務。
user.service.ts:
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { User } from './user.model';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map'
@Injectable()
export class UserService {
constructor(private http: Http) {
}
findAllUsers(): Observable<Array<User>> {
return this.http.get('/api/users')
.map((response: Response) => response.json())
.map((data: Array<User>) => {
return data;
});
}
}
然後我users.component調用從服務findAllUsers方法。
users.component.ts
import { Component, OnInit } from '@angular/core';
import { User } from './user.model';
import { UserService } from './user.service';
@Component({
selector: 'app-users',
providers: [UserService],
templateUrl: './users.component.html',
styleUrls: ['./users.component.css']
})
export class UsersComponent implements OnInit {
users: User[];
constructor(private userService: UserService) {
}
ngOnInit(): void {
this.userService.findAllUsers().subscribe((data: Array<User>) => {
this.users = data;
});
}
}
最後,users.component.html:
<h4>Users:</h4>
<div *ngFor="let user of users">
{{user}}
</div>
在我看來,我得到一個錯誤,指出:Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
我不知道如何解決這個。
如果我嘗試使用data
在服務返回前的調試器,那麼我可以看到我的HAL + JSON對象= data
,我可以看到我從data._embedded_users
要正確的信息。但是這不能映射到用戶[],因爲_embedded
不是我用戶模型的屬性。我需要先對Hal + Json對象做些什麼嗎?
你不需要從每個'user'中刪除''_links''嗎? –
@LambertoBasti您應該只將響應數據打印到控制檯。你可以看到整個結構 –
我實際上需要將數據綁定到一個類,所以在'.map()'操作符中刪除了'_links'字段 –