2017-06-13 11 views
0

ヒーローのツアー - パート6 - https://angular.io/tutorial/toh-pt6 をダウンロードしてインストールしても問題ありません。これは、メモリ内のWeb APIを使用します。ヒーローの角4ツアー:パート6(マスターディテールサンプル)、REST APIを使用しているときに機能しない

代わりに、REST(JSON)APIを使用するように変更したいと考えています。

私は以下の変更を行いました。

  1. app.module.ts は

    InMemoryWebApiModule.forRoot(InMemoryDataService)

  • InMemoryWebApiModule.forRoot(InMemoryDataService, {passThruUnknownUrl: true}) 
    

    に主人公を変更しました.service.ts が変更されました

    プライベートheroesUrl = 'api/heroes';

  • private heroesUrl = 'https://.../getdata.php 
    private heroesDetailsUrl = 'https://.../getdatadetails.php 
    

    にマスタービューは 詳細ビューが変更を行った後、英雄-details.component.ts

    で、マスタービューが正常に動作し、私heros.component.htmlですマスターデータ一覧を参照してください。 マスタービューから行を選択すると、詳細ビ​​ューが表示されますが、詳細データは表示されません。 ヒーローオブジェクト(マスターで選択されたオブジェクトの詳細が含まれていますが、常にJavascriptコンソールに未定義として表示され、プロパティにアクセスできません)

    ヒーロー詳細私は詳細サンプルは、私がインメモリーウェブAPIに切り替えた場合に完璧に動作しますが、RESTでは動作しません? を表示するには渡さMasterViewに反対して選択されるように変更する必要がある他に何

    ngOnInit(): void { 
        console.log('inside hero-details.component'); 
        console.log(this); 
        this.route.params 
         .switchMap((params: Params) => this.heroService.getHero(+params['id'])) 
         .subscribe(hero => this.hero = hero); 
        } 
    

    .components.ts api。REST APIによって返されるデータの形式は、inMemoryapiと全く同じです。 応答したすべての方に感謝します。

    +0

    あなたのPHPコードがデータを返していますか? Fiddlerを使用してレスポンスを検査してみてください。 –

    +0

    heroService getHeroメソッドに選択されたヒーローのIdパラメータを渡しているのがわかりますが、実際には残りのAPIにパラメータを渡していますか? URLパラメータとしてgetdatadetails.phpエンドポイントにIdを付けるはずですか? (例:?id = hero_id)。 – effy

    +0

    どういうわけか、残りのエンドポイントにIDを送信する必要があります。あなたの残りのAPIルートがどのように設定されているかはわかりませんが、getHeroメソッドの最初の行に表示されているように、ヒーローの詳細URL用の新しい変数を作成したので、新しい変数を使用するようにメソッドを変更するだけでなく、ヒストリのIDをアングルのようにルートの一部として例として、またはルートパラメータとして。 – effy

    答えて

    0

    ヒーローオブジェクトはマスターからディテールに決して渡されません。選択されたヒーローのIDだけがheroes.component.tsの54行目に表示されます。ルータはディテールルートに移動し、選択したヒーローIDを渡します。

    詳細コンポーネントが開始されると、ヒーローサービスは、hero-details.component.tsの38行目を見ると、マスターからのURLを介して渡されたヒーローIDを使用してヒーローをAPIから取得しますサブスクライブ関数が呼び出されるまで、詳細コンポーネントでは使用できません。これは、残りのAPI要求が完了し、ヒーローが返されたことを意味します。

    hero-details.component.tsの40行目を.subscribe(hero => {this.hero = hero, console.log("here's the hero!:", this.hero);});に変更すると、apiリクエストが完了するとコンソールにヒーローが表示されます。

    残りのAPIが配列を返す場合は、最初の要素(インデックス0)を選択する必要があります。

    関連する問題