2017-06-28 12 views
2

私はAngular4で作業しています。別の機能でhttp取得要求応答を使用しようとしています(私はホテルリストコンポーネントを持っていますが、私はホテルを選択してから別のエンドポイントにリダイレクトします)。 私の考えは、レスポンスを格納できる変数を持つクラスを作成することでした。角4:別のコンポーネントでHTTPリクエスト応答を使用するには?

export class Hotel { 
data = { 
    type: 'hotels', 
    id: '', 
    attributes: { 
     location: '', 
     name: '', 
     main_image_src: '', 
     has_wifi: '', 
     has_parking: '', 
     has_pets: '', 
     has_restaurant: '', 
     has_bar: '', 
     has_swimming_pool: '', 
     has_air_conditioning: '', 
     has_gym: '', 
     meal_plan: '', 
     user_id: '', 
     booking_id: '', 
     amount: '', 
     currency: '', 
     status: '', 
     stars: '' 
    } 
}; 

そして、それがサービスでインスタンス化されています

@Injectable() 
export class HotelService { 
    hotel = new Hotel; 
} 

サービスがhotelregister・コンポーネントにインポートし、私はそこにレスポンスオブジェクトを保存し、このようにされています。ここでは

getHotelId(id) { 
    const endpoint = 'https://cake-cup.glitch.me/api/hotels/'+id; 
    this.hotelregistrationservice.httpRequest(this.hotelservice.hotel, 
    endpoint, 'get') 
     .subscribe(
      response => { 
       this.hotelservice.hotel.data = response; 
       this.router.navigate(['hotels/1']) 

      }, 
      error => { 
       console.error(error) 
      }); 
} 

、私がhotelservice.hotel.dataをログオンすると、正しい応答が得られます。これは私が以下のように修飾子コンポーネントで使用しようとしているものです: import {HotelService} from '../hotel.service';

@Component({ 
    selector: 'app-single-hotel', 
    templateUrl: './single-hotel.component.html', 
    styleUrls: ['../../assets/app.component.scss'], 
    providers: [HotelService] 
}) 
export class SingleHotelComponent implements OnInit { 

    constructor(
    public hotelservice: HotelService, 
) { 
    console.log(this.hotelservice.hotel.data) 
    } 

ngOnInit(
) { } 
} 

ただし、hotelervice.hotel.dataは未定義です。問題を解決するために助けてください。

+0

からHotelServiceを削除する必要があります。 hotel.data = response; '正しいデータを取得しましたか? – crash

+0

はい、hotelregisterコンポーネントではyesです。 – balintd

+0

[OK]を私の答えを確認し、それが動作する場合私に知らせてください – crash

答えて

1

問題は、コアモジュールにサービスを追加する必要があることです。 providersセクションのapp.module.tsセクション。この方法ではシングルトンになります。そうしないと、各コンポーネントで新しいサービスをインスタンス化し、それぞれ独自の独立したデータを持ちます。

希望しますが、それ以外の場合は教えてください。

編集: あなたはとてもあなた `はconsole.log(this.hotelservice.hotel.data)であれば、` `this.hotelservice後に、他のコンポーネントのプロバイダセクション

+0

私は今Hotelserviceプロバイダーが含まれているが、私は未定義を受信して​​いる修飾子ページに含まれています。プロバイダを他のコンポーネントから削除する必要がありますか? – balintd

+0

はい、私はそれをより明確にするために私の答えを更新します。コンポーネントレベルでは、プロバイダに同じサービスを持つべきではありません – crash

+0

ありがとう!それは今働く。 – balintd

関連する問題