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
の結果をどのように印刷しますか?
Observableにサブスクライブし、発行された値を処理するコールバックを渡す必要があります
this.myService.getConfig().subscribe(val => console.log(val));
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;
});
this.myService.getConfig().subscribe(
(res) => console.log(res),
(err) => console.log(err),
() => console.log('done!')
);