无法使用 Angular 打印嵌套的 JSON 数据 6
Can't print nested JSON data with Angular 6
我正在学习编码,只是 运行 解决了 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>
如果有人能指出解决方案或我做错了什么,我将不胜感激。
您需要将数据保存在一个实例中属性才能访问它。 user_data
是你的函数的局部变量,你不能在模板中访问它,所以你应该使用这样的东西:
export class TestComponent implements OnInit {
observableTest: Observable<any>
errorMessage: String;
user_data: any;
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']);
this.user_data = user_data; // here
}
);
}
}
您的代码存在一些问题:
export class TestComponent implements OnInit {
observableTest: Observable<any>
errorMessage: String;
user_data: any;
constructor(private testService: TestService) {
}
ngOnInit(): void {
this.testService.getTestWithObservable().subscribe(
res => {
let user = res[0]["users"];
this.user_data = user["data"];
console.log(user_data["name"]);
}
);
}
}
在Angular >= 4中,管道方法更好地处理Observable
this.http.get(this.url)
.pipe(
filter(...),
map(...)
)
使用 HttpClient(Http 已弃用),.json() 已为您完成。您不需要 extractData 函数。
- 您必须初始化您的变量。并使用"this"来引用它。
我正在学习编码,只是 运行 解决了 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>
如果有人能指出解决方案或我做错了什么,我将不胜感激。
您需要将数据保存在一个实例中属性才能访问它。 user_data
是你的函数的局部变量,你不能在模板中访问它,所以你应该使用这样的东西:
export class TestComponent implements OnInit {
observableTest: Observable<any>
errorMessage: String;
user_data: any;
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']);
this.user_data = user_data; // here
}
);
}
}
您的代码存在一些问题:
export class TestComponent implements OnInit {
observableTest: Observable<any>
errorMessage: String;
user_data: any;
constructor(private testService: TestService) {
}
ngOnInit(): void {
this.testService.getTestWithObservable().subscribe(
res => {
let user = res[0]["users"];
this.user_data = user["data"];
console.log(user_data["name"]);
}
);
}
}
在Angular >= 4中,管道方法更好地处理Observable
this.http.get(this.url)
.pipe(
filter(...),
map(...)
)
使用 HttpClient(Http 已弃用),.json() 已为您完成。您不需要 extractData 函数。
- 您必须初始化您的变量。并使用"this"来引用它。