【发布时间】:2018-07-05 20:28:38
【问题描述】:
我正在学习编码,但在使用 Angular 6 时遇到了这个问题,我似乎无法解决。我之前能够获取 JSON 的数据,但现在它是嵌套的,我不知道如何获取它的数据。这就是我到目前为止所做的事情
服务
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class TestService {
url = "http://localhost:80/assets/data/test.json";
constructor(private http:Http) { }
getTestWithObservable(): Observable<any> {
return this.http.get(this.url)
.map(this.extractData)
.catch(this.handleErrorObservable);
}
private extractData(res: Response) {
let body = res.json();
return body;
}
private handleErrorObservable (error: Response | any) {
console.error(error.message || error);
return Observable.throw(error.message || error);
}
}
组件
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { TestService } from './test.service';
@Component({
selector: 'ngx-test',
styleUrls: ['./test.component.scss'],
templateUrl: './test.component.html',
})
export class TestComponent implements OnInit {
observableTest: Observable<any>
errorMessage: String;
constructor(private testService: TestService) { }
ngOnInit(): void {
this.testService.getTestWithObservable().subscribe(
res => {
let user = res[0]["users"];
let user_data = user["data"];
console.log(user_data["name"]);
}
);
}
}
JSON
[{
"id": 1,
"users": {
"user_id": 14,
"data": [{
"name": "James",
"age": 20
},
{
"name": "Damien",
"age": 25
}]
}
}]
HTML
<div *ngFor="let x of user_data; let i = index">
{{x.name}}
</div>
如果有人能指出解决方案或我做错了什么,我将不胜感激。
【问题讨论】:
-
你在console.log的时候获取数据吗?
-
user_data是一个数组,所以你需要user_data[0]["name"](虽然没有理由为属性使用方括号语法,也可以使用user_data[0].name) -
this.user_data=res[0].users.data。说明: res 是一个数组, res[0] 是一个拥有 users 属性的对象。 users 属性有一个属性 data 是您要查找的数组
标签: json angular typescript nested ngfor