我有一个简单的函数,包含在服务中,返回一个对象的可观察对象:
private someData;
getDataStream(): Observable<any> {
return Observable.of(this.someData);
}
我订阅了一个组件的onInit函数:
private somethingsomething;
ngOnInit() {
this.dataService.getDataStream().subscribe(
(data) => {
this.somethingsomething = data; // WORKS AND ALWAYS UP TO DATE
console.log(data); // ONLY WORKS ONCE
}
)
}
如评论所示,给予变量的数据(随后显示在视图中)总是很好。但另一方面,console.log只触发一次,然后再也不会触发。
如果数据发生变化,我怎么能控制数据?
答案 0 :(得分:0)
this.somethingsomething
更改的原因是它具有someData
的引用。 getDataStream
方法只执行一次。但是,由于对象发生更改,具有该引用somethingsomething
值的字段也会更改。这是因为Object
在javascript中是可变的。
如果getDataStream
从服务器返回响应,则情况并非如此。
答案 1 :(得分:0)
要将此数据记录到控制台,最好使用do
运算符。每次从getDataStream
observable推送新值时,do
运算符将console.log该数据。
private somethingsomething;
ngOnInit() {
this.dataService.getDataStream()
.do(data => console.log(data))
.subscribe((data) => {
this.somethingsomething = data;
}
)
}
答案 2 :(得分:0)
您可以使用以下代码。效果很好。
ngOnInit() {
this.dataService.getDataStream().subscribe(
res => {
this.somethingsomething = res ;
console.log(res);
});
}