【发布时间】:2017-06-17 03:10:42
【问题描述】:
我是 angular 2 和 observables 的新手,但我想试一试。所以我已经安装了 angular-cli 并做了一个简单的测试项目。
我想要做的只是读取一个 json 文件并处理组件内部的数据(最初的目的是提供服务,但我想从低端开始)。
所以我在 assets/json 文件夹 (testjson.json) 中创建了一个 json 文件:
{
"teststring": "test works"
}
然后我从我的 content.component.ts 文件中导入了来自 angular 的 http 和 rxjs 地图内容:
import { Component, OnInit } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
@Component({
selector: 'app-content',
templateUrl: './content.component.html',
styleUrls: ['./content.component.css']
})
export class ContentComponent implements OnInit {
title: string = "Default";
data;
constructor(private http:Http) {
http.get('assets/json/testjson.json').map(res => res.json()).subscribe(data => {this.data = data; this.title = data.teststring; console.log(this.data);});
}
ngOnInit() {
}
}
到目前为止一切顺利,应用程序打印出以下内容:
app works!
test works [object Object]
但我想在整个组件中使用这些数据,而不仅仅是在构造函数中。但是如果我尝试在构造函数之外(在 ngOnInit 函数内)控制台记录“this.data”,它会在控制台中打印 undefined。
我知道,它一定与异步加载有关,但不幸的是我不知道如何告诉应用程序等到 this.data 被填充。
我希望你能帮助我。当然,将来我想要一种服务,它可以做这种事情,并且不止一个组件应该从中获取数据。
提前致谢!
【问题讨论】:
-
首先将你的异步代码从构造函数移动到 ngOnInit()。承诺解决后您的数据可用
标签: json angular typescript observable angular-cli