如何从angular2中的可观察数据中获取数据


77

我正在尝试打印使用中的http通话结果Angularrxjs

考虑以下代码

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


你得到解决方案了吗?
ramya

Answers:


100

您需要订阅可观察对象,并传递一个处理发出的值的回调

this.myService.getConfig().subscribe(val => console.log(val));

1
res.json()而不是res.json
Pardeep Jain

嗯。但尚未提及,因此请发表评论
Pardeep Jain

不知道您的最后评论是什么意思。它已经在问题的代码中。订阅时无需再次转换为JSON。
君特Zöchbauer

嗯,我只是想说我们需要同时转换为.json()或.map()。
Pardeep Jain

console.log(JSON.stringify(val))
bmusical '16

24

从angularjs 1.x开始,Angular基于observable而不是promise基础,因此当我们尝试使用http它获取数据时,返回observable而不是promise,就像您所做的那样

 return this.http
      .get(this.configEndPoint)
      .map(res => res.json());

然后要获取数据并在视图上显示,我们必须使用RxJs函数将其转换为所需的形式,例如 .map() function and .subscribe()

.map()用于将可观察到的(从http请求接收到的)转换为任何形式,例如 .json(), .text() 为Angular官方网站中所述的,

.subscribe()用于订阅那些可观察到的响应,并将它们放入某个变量中,以便我们将其显示在视图中

this.myService.getConfig().subscribe(res => {
   console.log(res);
   this.data = res;
});

16
this.myService.getConfig().subscribe(
  (res) => console.log(res),
  (err) => console.log(err),
  () => console.log('done!')
);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.