2017-10-21 15 views
0

私は、ユーザーがTV番組を検索し、TMDBへのAPIコールから、そのTV番組の最後のエピソードがいつ見られるのか、ショーは放送された。私は最後の部分を表示することに問題があります - 最後の放映されたエピソードを表示します。TMDB-API呼び出しの特定のデータをIonicに表示する

私のサービス(シリーズサービス)は、 です。名前、票、簡単な概要などの情報があります。私はまた、テレビ番組のIDからより多くの情報を取得するサービスを持っています。ここで

searchSeries(seriesName) { 
    var url = 'http://api.themoviedb.org/3/search/tv?query=&query=' + encodeURI(seriesName) + '&api_key=[MY_API_KEY]'; 
    var response = this.http.get(url).map(res => res.json()); 
    return response; 
} 
    moreInfo(seriesId) 
    { 
    var url = 'https://api.themoviedb.org/3/tv/'+seriesId+'?api_key=[MY_API_KEY]&language=en-US' 
    var response = this.http.get(url).map(res => res.json()); 
    return response; 
    } 

データを表示する機能(Series.ts)と私のページです:

 serie: {id}; 
     serieInfo: {}; 


     constructor(public navCtrl: NavController, 
        public navParams: NavParams, 
        public seriesService: SeriesService, 
        public alertCtrl: AlertController) { 
//Get the serie object I picked in my search 
     this.serie = navParams.get('serie'); 

//Use the ID of that object to use my other service to get more info 
     console.log(this.serie.id); 
     this.seriesService.moreInfo(this.serie.id).subscribe(
      data => { 
      this.serieInfo = data.results; 
      console.log(data); 
      }, 
      err => { 
      console.log(err); 
      }, 
     () => console.log('Series Search Complete') 
     ); 

     } 

テレビ番組を表示するための私のHTMLページ(Series.html):

<ion-content padding> 
    <div *ngIf="serie" class="selection"> 
    <ion-card> 
     <ion-item> 
     <ion-avatar item-left image-large> 
      <img src="https://image.tmdb.org/t/p/w92{{serie.poster_path}}"/> 
     </ion-avatar> 
     <h1>{{serie.name}}</h1> 
     <p>{{serie.first_air_date}}</p> 
     </ion-item> 

     <ion-item> 
     <ion-icon name="document" item-left></ion-icon> 
     <h2>Overview</h2> 
     <p class="item-description">{{serie.overview}}</p> 
     </ion-item> 
     <ion-item> 
     <ion-icon name="bookmark" item-left></ion-icon> 
     <h2>Average Vote</h2> 
     <p>{{serie.vote_average}}</p> 
     </ion-item> 
     <ion-item> 
     <ion-icon name="bookmark" item-left></ion-icon> 
     <h2>Air date</h2> 
     <p>{{serie.last_air_date}}</p> 
     </ion-item> 
     <ion-row> 
     <ion-col text-right> 
      <button 
      ion-button 
      clear 
      small 
      (click)="onAddToFavorites(serie)">Favorite</button> 
     </ion-col> 
     </ion-row> 
    </ion-card> 
    </div> 
</ion-content> 
は、

マイサーチ機能(Search.ts):

searchForSeries(event, key) { 
    if(event.target.value.length > 2) { 
     this.seriesService.searchSeries(event.target.value).subscribe(
     data => { 
      this.series = data.results; 
      console.log(data); 
     }, 
     err => { 
      console.log(err); 
     }, 
     () => console.log('Series Search Complete') 
    ); 
    } 
    } 

    selectSeries(event, serie) { 
    console.log(serie); 
    this.navCtrl.push(Series, { 
     serie: serie 
    }); 
    } 

    ionViewDidLoad() { 
    console.log('ionViewDidLoad Search'); 
    } 

このように、私は最初のサービスコールの情報をアプリケーションで見ることができますが、コンソールログでは両方のAPI呼び出しの情報を見ることができます。なぜ2番目のAPIコールからのデータを表示できないのですか?

はここでそれがどのように見えるかの写真です: https://imgur.com/a/HBwBl

を私が間違っていると思われるものは、私はのように見えることにしたい私のSeries.ts、である:

/*****************Don't pass id in {} *****************/ 
    serie: {}; 
     serieInfo: {}; 


     constructor(public navCtrl: NavController, 
        public navParams: NavParams, 
        public seriesService: SeriesService, 
        public alertCtrl: AlertController) { 
     this.serie = navParams.get('serie'); 

     console.log(this.serie.id); 
/******* BUT THEN THIS ID GETS MAD AND SAYS: 
"Property 'id' does not exist on type '{}'."**********/ 
     this.seriesService.moreInfo(this.serie.id).subscribe(
      data => { 
      this.serieInfo = data.results; 
      console.log(data); 
      }, 
      err => { 
      console.log(err); 
      }, 
     () => console.log('Series Search Complete') 
     ); 

     } 

なぜ私が見ることができます私のコンソールログにはオブジェクトがありますが、Series.htmlには表示されませんか?

答えて

0

解決済み! セリエのオブジェクト全体を送信するのではなく、セリエイドのIDを渡すだけです。

search.htmlの:

<ion-content padding> 
    <ion-item> 
    <ion-label color="primary" stacked>Search for a TV-show</ion-label> 
    <ion-input type="text" (input)="searchForSeries($event, searchKey)"></ion-input> 
    </ion-item> 

    <ion-list> 
    <ion-item *ngFor="let serie of series" (click)="selectSeries($event, serie.id)"> 
     <ion-avatar item-left> 
     <img src="https://image.tmdb.org/t/p/w92{{serie.poster_path}}"/> 
     </ion-avatar> 
     <h2>{{serie.original_name}}</h2> 
     <p class="item-description">{{serie.overview}}</p> 
    </ion-item> 
    </ion-list> 
</ion-content> 

Search.ts:

selectSeries(event, id) { 
    console.log(id); 
    this.navCtrl.push(Series, { 
     id 
    }); 
    } 

Series.ts:

serie: {}; 


    constructor(public navCtrl: NavController, 
       public navParams: NavParams, 
       public seriesService: SeriesService, 
       public alertCtrl: AlertController) { 
    this.serie = navParams.get('serie'); 
    this.seriesService.moreInfo(this.navParams.get('id')).subscribe((params) => { 
     let id = params['id']; 
     this.seriesService.moreInfo(id).subscribe(serie => { 
     console.log(serie); 
     this.serie = serie; 
     }) 
    }); 
関連する問題