如何从angular2中的observable获取数据
Posted
技术标签:
【中文标题】如何从angular2中的observable获取数据【英文标题】:How to get data from observable in angular2 【发布时间】:2016-07-23 13:23:13 【问题描述】:我正在尝试使用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
的结果?
【问题讨论】:
你找到解决方案了吗? 【参考方案1】:您需要订阅 observable 并传递一个处理发出值的回调
this.myService.getConfig().subscribe(val => console.log(val));
【讨论】:
它的res.json()
而不是res.json
嗯。但没有提到它所以发表评论
不确定您上次评论的意思。它已经在问题的代码中。订阅时无需再次转换为 JSON。
嗯我只是想说我们当时需要转换成 .json() 或 .map()。
console.log(JSON.stringify(val))【参考方案2】:
Angular 基于 observable 而不是从 angularjs 1.x 开始的 promise 基础,所以当我们尝试使用 http
获取数据时,它会返回 observable 而不是 promise,就像你做的那样
return this.http
.get(this.configEndPoint)
.map(res => res.json());
然后要获取数据并在视图中显示,我们必须使用 RxJs 函数将其转换为所需的形式,例如 .map() function and .subscribe()
.map() 用于将 observable(从 http 请求接收)转换为任何形式,如 Angular 官网中所述的.json(), .text()
,
.subscribe() 用于订阅那些可观察到的响应并将其放入某个变量中,以便我们将其显示到视图中
this.myService.getConfig().subscribe(res =>
console.log(res);
this.data = res;
);
【讨论】:
如果服务需要时间来返回数据并且您需要在下一个函数中使用 this.data 怎么办? 那么你可以使用 aync/await 或者你可以在 http 服务调用中调用你的下一个函数。两种方式都应该有效。【参考方案3】:this.myService.getConfig().subscribe(
(res) => console.log(res),
(err) => console.log(err),
() => console.log('done!')
);
【讨论】:
以上是关于如何从angular2中的observable获取数据的主要内容,如果未能解决你的问题,请参考以下文章
Rxjs 过滤器运算符不适用于 Angular2 Observable
Angular2 http.get() ,map(), subscribe() 和 observable 模式 - 基本理解