![](/img/trans.png)
[英]How do I display returned JSON from RESTful API call with JavaScript
[英]How to display a single JavaScript Object / JSON item from API Call
我从已经设法在表格中显示的 API 调用中获取数据。 现在,当您单击表中的某个项目时,我想显示该项目的更详细视图。
因此,当我打开链接 localhost:4200/detail/12 时,我想显示来自 id=12 的 object 的数据。 但我无法弄清楚如何做到这一点。
我目前从 people.component.html
...
<tr *ngFor="let data of data" routerLink="/detail/{{data.person_id}}">
<td>{{data.person_id}}</td>
<td>{{data.name}}</td>
</tr>
...
API的数据为JSON格式:
[{"person_id":"1","name":"Tom"},{"person_id":"2","name":"Clarissa"},{"person_id":"4","name":"Micky"},...]
但显示的(在浏览器中)数据记录为 JavaScript 对象:
0:
person_id: 1
name: "Tom"
2:
person_id: 2
name: "Clarissa"
3:
person_id: 4
name: "Micky"
...
那么我该如何调整 people-detail.component.ts 和 people-detail.component.html 以仅显示所选项目的数据(例如,person_id = 12)而不是所有项目(这就是发生的情况目前)?
这就是我的 people-detail.component.ts 目前的样子
...
export class PeopleDetailComponent implements OnInit {
public data: any = []
constructor(
public http: HttpClient,
private route: ActivatedRoute) { }
getData(){
const person_id = +this.route.snapshot.paramMap.get('person_id');
const url ='http://localhost:4000/api/allpeople'
this.http.get(url).subscribe
(data => this.data = data);
}
ngOnInit() : void{
this.getData()
}
这是我目前的 people-detail.component.html:
<div *ngFor="let data of data">
<div>
<span>id1: </span>
{{data.regulation_id}}
</div>
</div>
我会使用旋转变压器 go 。
首先声明详细视图的路由:
const routes: Routes = [
{
path: 'detail/:id',
component: PersonComponent,
resolve: { message: PersonResolver }
}
];
您可以在任何想要获取人员详细信息的地方使用解析器(在加载组件之前获取数据的可重用方式
然后在路由上创建解析器:
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRoute, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { of } from "rxjs";
import { delay } from "rxjs/operators";
@Injectable()
export class PersonResolver implements Resolve<Person> {
constructor(private route: ActivatedRoute) {
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
const id = route.paramMap.get('id');
const url = 'your url here';
return this.http.get(url);
}
}
你也可以看看这个选择内联stackblitz
您必须为数据创建接口:
export interface iUsers {
person_id: string;
name: string;
}
那么您必须将代码更改为:
public data: iUsers[] = []
this.http.get<iUsers[]>(url).subscribe((res)=>{
this.data = res
console.log(this.data)
})
如下设置点击监听器。
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of data" (click)="onClickHandler(data.person_id)">
<td>{{data.person_id}}</td>
<td>{{data.name}}</td>
</tr>
</tbody>
</table>
这会将所选项目的 id 传递给处理程序方法。具有所选 id 的 object 将存储在“selected”变量中。
onClickHandler(id)
{
this.selected=this.data.find(item=>{
if(item['id']===id)
{
return true;
}
return false;
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.