我是angular2 typescript和rxjs以及observables的新手 .
我正在尝试使用此代码从api获取信息
let Alertsanswer = this.LogService.getAlertsForClient(this.userId);
var a = Alertsanswer.subscribe((response) => {
this.alerts=JSON.parse(response)
console.log(this.alerts) //give the right response.
},
error => {
var err = error;
alert(err);
}
)
你可以在订阅中看到我初始化一个私有变量:“this.alerts”
在subscribe之外,这个变量有未定义的值console.log(this.alerts)//给出undefined .
在组件doom中使用this.alert也是未定义的,这会给出错误:
<div>{{alerts}}</div>
第一个问题:为什么“”订阅中的this.alerts为控制台提供正确的值,但外部(包括厄运)始终未定义 .
第二个问题:我理解来自服务器的值是异步的,如果我有更多的代码继续回答我在哪里写它(回调),它会在订阅内吗? subscribe是什么意思?谢谢你的帮助
2 回答
对于你的第一个问题,
this.alerts
在subscribe finish
之后得到正确的值(从api获取数据),在完成之前使用this.alerts
将不会给出正确的值 . 您应该使用<div *ngIf="alerts">{{alerts}}</div>
来确保数据可以使用 . 例如,在订阅完成之前,使用<div>{{alerts.property}}</div>
将引发错误 .console.log
也是同样的道理 .对于你的第二个,使用:
嘿,你通过将服务分配给变量来做一些不稳定的事情 . 编辑了一些代码,向您展示我将如何定义: