2016-11-28 7 views
0

私はAngular 2 Tour of Heroesチュートリアルを行ってきましたが、サービスからデータを取得するためにlesson on using HTTPを理解していません。Angular 2チュートリアルでHTTPを理解する

ヒーローサービスのこのレッスンでは、変数heroesUrlは「app/heroes」と宣言されています。/

import { InMemoryDbService } from 'angular-in-memory-web-api'; 

export class InMemoryDataService implements InMemoryDbService { 
    createDb() { 
    let heroes = [ 
     { id: 11, name: 'Mr. Nice (api)' }, 
     { id: 12, name: 'Narco' }, 
     { id: 13, name: 'Bombasto' }, 
     { id: 14, name: 'Celeritas' }, 
     { id: 15, name: 'Magneta' }, 
     { id: 16, name: 'RubberMan' }, 
     { id: 17, name: 'Dynama' }, 
     { id: 18, name: 'Dr IQ' }, 
     { id: 19, name: 'Magma' }, 
     { id: 20, name: 'Tornado' }, 
     { id: 21, name: 'Mister Man' } 
    ]; 
    return { heroes }; 
    } 
} 

しかし、私はアプリケーション」と同じであると仮定ルーティングモジュール「ヒーロー」(中:

private heroesUrl = 'app/heroes'; // URL to web api 

    constructor(private http: Http) { } 

    getHeroes(): Promise<Hero[]> { 
    return this.http.get(this.heroesUrl) 
       .toPromise() 
       .then(response => response.json().data as Hero[]) 
       .catch(this.handleError); 
    } 

データは、静的配列としてメモリ内のデータサービスで宣言されていますヒーロー ')はHeroesComponentを指します。それは、その後HeroesComponentに、ではないデータ・ソースにhttp.getバックを行いますHeroesComponent.getHeroes()通話HeroService.getHeroes()のように見える表面には

getHeroes(): void { 
    //Result of heroService.getHeroes is a Promise 
    this.heroService.getHeroes().then(heroesresult => this.heroes = heroesresult); 
    } 

:HeroesComponentで

const routes: Routes = [ 
    { path: '', redirectTo: '/dashboard', pathMatch: 'full' }, 
    { path: 'dashboard', component: DashboardComponent }, 
    { path: 'detail/:id', component: HeroDetailComponent }, 
    { path: 'heroes', component: HeroesComponent } 
]; 

getHeroes()機能はthis.heroService.getHeroes()関数を呼び出します。

私はすべて魔法のように動作しますが、HeroesServiceからthis.http.get(this.heroesUrl)への呼び出しによってインメモリデータサービス内のデータがどのように取得されるかは説明されていません。

誰か理解してもらえますか?

+0

'民間heroesUrlは= 'アプリ/英雄で改善する必要があるもののための提案を行ってきました。あなたのアプリケーションを開発するときに、あなたのURLでそのURLを置き換えて – eugene

答えて

0

確かに魔法ではありません。

何が起こっているのかは、メモリ内のAPIにリクエストを送信することです。

は、基本的にクラスInMemoryDataServiceをin-memory-api

を見てください、観察可能なメモリAPIで作成しInMemoryDbServiceから延びています。

オンザフライで作成されたスタブと考えると、getメソッドを呼び出すと、呼び出しはそのパッケージ(xhrbackend経由)にリダイレクトされ、そのヒーローリストが取得されます。 。

+0

Aaah、私は今それを得ると思います。ありがとう@ xe4me。 –

1

'app/heroes'のURLがルーティングモジュール '英雄'を参照していません。それはin-memory-data-service.tsのヒーローデータオブジェクトを参照しています。それは魔法ではありません。 URLは単にパスではなくデータオブジェクトを参照しています。 https://angular.io/tutorial/toh-pt6

ドキュメントは明らかであるには余りにも簡潔であり、私はhttps://github.com/angular/angular.io/issues/3559

関連する問題