当我在订阅中记录我的变量值时,我有一个值但是在外面做它时我得到了未定义的???:
this._postService.getConf("app/conf/conf.json")
.subscribe(res =>{
this.home = JSON.stringify(res);
console.log("value :" + this.home);
我想用一定的值初始化我的home变量我正在ngOnInit上做这个但是当我试图把它弄到外面时它得到的值是未定义的:
这是我的功能:
getConf(url) {
return this._http.get(url).
map(res => {return res.json()});
}
ngOnInit() {
this._postService.getConf("app/conf/conf.json")
.subscribe(res => {
this.home = JSON.stringify(res);
console.log("hahowaaaaaaaa" + this.home);
}
);
this._postService.getPosts(this.home)
.subscribe(result =>{
this.loading = false;
this.actionsG = result;
var count = JSON.stringify(result);
this.aCount = count.substring(count.indexOf(','),23);
},error=> console.error('Error: ' + error), ()=> console.log('finish! ActionsG'));
this._postService.getPosts(this.home ).subscribe(result => this.actionsV =
result, error=> console.error('Error: ' + error), ()=> console.log('finish! ActionsV ngOnInit' + this.page));
}
答案 0 :(得分:5)
观察者的工作方式。当来自服务器的响应到达时,传递给subscribe(...)
的回调由observable调用。
console.log()
之外的subscribe()
在执行服务器调用之前执行。
答案 1 :(得分:3)
我的ngOnInit()调用了一个从数据库中获取数据的进程。
我希望在调用之后,方法中更新的this.##
变量可用。如上所述,调用传递给observable,这意味着变量在ngOnInit()中不可用。但是当显示HTML页面时,它们都被填充。
所以解决方案是在方法中完成所有必要的工作,然后引用将用HTML填充的变量。
this.service.getCity(zip).subscribe(
data => {
if (data.errStatus == 0) {
console.log("data: " + data.xx.List);
this.xx.List = data.xx.List;
console.log("data2: " + this.xxList);
} else {
data.errText;
console.log(data.errText);
}
},
err => console.error(err),
() => console.log('done')
);