我正在尝试使用rxjs
在Angular
中打印http
调用的结果
考虑以下代码
import { Component, Injectable, OnInit } from '@angular/core';
import { Http, HTTP_PROVIDERS } from '@angular/http';
import 'rxjs/Rx';
@Injectable()
class myHTTPService {
constructor(private http: Http) {}
configEndPoint: string = '/my_url/get_config';
getConfig() {
return this.http
.get(this.configEndPoint)
.map(res => res.json());
}
}
@Component({
selector: 'my-app',
templateUrl: './myTemplate',
providers: [HTTP_PROVIDERS, myHTTPService],
})
export class AppComponent implements OnInit {
constructor(private myService: myHTTPService) { }
ngOnInit() {
console.log(this.myService.getConfig());
}
}
每当我试图打印出getconfig
的结果时,它总是返回
Observable {_isScalar: false, source: Observable, operator: MapOperator}
即使我返回的是一个json对象。
我如何打印getConfig
的结果?
发布于 2016-04-04 13:41:32
您需要订阅observable并传递一个处理发出的值的回调
this.myService.getConfig().subscribe(val => console.log(val));
发布于 2016-04-04 13:49:21
从Angularjs1.x开始,Angular是基于observable而不是promise base的,所以当我们尝试使用http
获取数据时,它会返回observable而不是promise,就像您所做的那样
return this.http
.get(this.configEndPoint)
.map(res => res.json());
然后,为了获取数据并显示在视图上,我们必须使用.map() function and .subscribe()
等RxJs函数将其转换为所需的形式
.map()用于将可观察对象(从http请求接收)转换为任何格式,如Angular官方网站中所述的.json(), .text()
。
.subscribe()用于订阅那些可观察到的响应,并将其放入某个变量中,以便将其显示到视图中
this.myService.getConfig().subscribe(res => {
console.log(res);
this.data = res;
});
发布于 2016-04-04 14:10:29
this.myService.getConfig().subscribe(
(res) => console.log(res),
(err) => console.log(err),
() => console.log('done!')
);
https://stackoverflow.com/questions/36395252
复制相似问题