HTTP Angularサーバーに接続しているシンプルなREST 4アプリケーションがあり、このサーバーは単純にJSONペイロードを返しているため、このJSONペイロードを表示したいブラウザにあるように、これは私のmakeRequest TypeScript関数です。
import { Component, OnInit } from '@angular/core';
import {Http, Response} from '@angular/http';
@Component({
selector: 'app-simple-http',
templateUrl: './simple-http.component.html'
})
export class SimpleHttpComponent implements OnInit {
data: string;
loading: boolean;
constructor(private http: Http) {
}
ngOnInit() {
}
makeRequest(): void {
this.loading = true;
this.http.request('http://jsonplaceholder.typicode.com/posts/1')
.subscribe((res: Response) => {
this.data = res.json();
this.loading = false;
});
}
}
http://jsonplaceholder.typicode.com/posts/1 を呼び出すと、次のJSONが返されます。
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
これをHTMLコンポーネントに次のように表示します。
<h2>Basic Request</h2>
<button type="button" (click)="makeRequest()">Make Request</button>
<div *ngIf="loading">loading...</div>
<pre>Data Obtained is: {{ data }}</pre>
しかし、ブラウザでは、これが表示されます。
JSONをそのまま表示するにはどうすればよいですか?
json pipe を使用できます。テンプレートで:
<pre>Data Obtained is: {{ data | json }}</pre>
また、data
プロパティのタイプをany
ではなくstring
に変更する必要があります。
次の2つのオプションがあります。
組み込みのパイプJsonPipeを使用します(_this.data
_はany
型でなければなりません):
_<pre>Data Obtained is: {{ data | json }}</pre>
_
JSON文字列を手動で取得します。
this.data = JSON.stringify(res.json()); //data is a string :)
または
<pre>Data Obtained is: {{ JSON.stringify(data) }}</pre>
テンプレートの値は.toString()
メソッドを呼び出すことで表示されるため、基本オブジェクト(_{key: value}
_のようなもの)は_[object Object]
_を表示するだけであることを理解する必要があります
ここに working demo があり、app.tsファイル、ajax呼び出し、jsonパイプを含むテンプレートがあることを確認します。