web-dev-qa-db-ja.com

angular2でobservableからデータを取得する方法

httpを使用してAngularを呼び出してrxjsの結果を印刷しようとしています

次のコードを検討してください

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の結果をどのように印刷しますか?

49
testing

Observableにサブスクライブし、発行された値を処理するコールバックを渡す必要があります

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

Angularは、angularjs 1.xのpromise baseではなくobservableに基づいているため、httpを使用してデータを取得しようとすると、promiseではなくobservableが返されます。

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

次に、データを取得してビューに表示するには、.map() function and .subscribe()などのRxJs関数を使用して目的の形式に変換する必要があります

.map()は、Angularの公式Webサイトで述べられているように、オブザーバブル(httpリクエストから受信)を.json(), .text()のような任意の形式に変換するために使用されます。

.subscribe()は、これらの観察可能な応答をサブスクライブするために使用され、トンを変数に入れて、そこからビューに表示します

this.myService.getConfig().subscribe(res => {
   console.log(res);
   this.data = res;
});
16
Pardeep Jain
this.myService.getConfig().subscribe(
  (res) => console.log(res),
  (err) => console.log(err),
  () => console.log('done!')
);
15
micronyks