gpt4 book ai didi

angular - 从 Angular 2 中的 Hal+JSON 对象解析信息

转载 作者:太空狗 更新时间:2023-10-29 18:13:34 24 4
gpt4 key购买 nike

我有一个 spring-data-rest 存储库,它生成一个 hal+json 对象,我希望我的 Angular 2 前端能够接收和显示该对象。

Hal+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
}
}

我有一项服务可以向该 API 发出获取请求。

用户服务.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 方法。

用户.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>

在我看来,我收到一条错误消息:找不到类型为“object”的不同支持对象“[object Object]”。 NgFor 仅支持绑定(bind)到 Iterables,例如 Arrays。 我不确定如何解决这个问题。

如果我在服务返回 data 之前尝试使用调试器,那么我可以看到我的 hal+json object = data,并且我可以看到正确的我想从 data._embedded_users 获得的信息。但这不能映射到 User[] 因为 _embedded 不是我的用户模型的属性。我需要先对 Hal+Json 对象做些什么吗?

最佳答案

Do I need to do something to the Hal+Json object first?

不是很明显吗?提取服务中的数据即可

findAllUsers(): Observable<Array<User>> {
return this.http.get('/api/users')
.map((response: Response) => response.json())
.map((data: any) => {
return data._embedded.users as User[];
});
}

你之前有什么

.map((data: Array<User>) => {
return data;
});

是不正确的,因为您假设传递给第二个 map 的数据是用户数组,而实际上它是整个 HAL 对象。将它更改为 any 允许你们两个从中提取用户。

关于angular - 从 Angular 2 中的 Hal+JSON 对象解析信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43403989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com