2017-08-18 8 views
0

私はイオン3アプリケーションを構築していますが、私は奇妙な問題に直面しています。私が示すこのページではngデータをリフレッシュしないでください

<ion-header> 

    <ion-navbar> 
    <ion-title>{{navParams.get('name')}}</ion-title> 
    </ion-navbar> 

</ion-header> 


<ion-content padding> 
    <ion-segment [(ngModel)]="view"> 
    <ion-segment-button value="info"> 
     Info 
    </ion-segment-button> 
    <ion-segment-button value="recensioni"> 
     Recensioni 
    </ion-segment-button> 
    </ion-segment> 

    <div [ngSwitch]="view"> 
    <div id="info"> 
     <div *ngSwitchCase="'info'"> 
     <div class="flexBox"> 
      <div *ngIf="details != undefined" [style.background]="(details.open_now) ? 'green' : 'red'"></div> 
      <span *ngIf="details != undefined && details.open_now">Aperto</span> 
      <span *ngIf="details != undefined && !details.open_now">Chiuso</span> 
      <ion-icon name="call" (click)="call()"></ion-icon> 
      <ion-icon name="navigate" (click)="navigateTo()"></ion-icon> 
     </div> 
     </div> 
     <div #map2 [style.height]="(view == 'info') ? '35vh' : '0px'"></div> 
     <div *ngSwitchCase="'info'" id="slides"> 
     <ion-slides *ngIf="details != undefined"> 
      <ion-slide *ngFor="let img of details.photos" (click)="openImg($event)"> 
      <img [src]="'https://maps.googleapis.com/maps/api/place/photo?key=AIzaSyD_9bj_Ao6nklX7PWrM_1E-iDH4EPVWV6A&maxwidth=1600&photoreference=' + img.photo_reference" /> 
      </ion-slide> 
     </ion-slides> 
     </div> 
    </div> 

    <div id="rec"> 
     <div *ngSwitchCase="'recensioni'"> 
     <ion-list-header> 
      <div id="avg"> 
      <div> 
       <span item-start text-wrap>Voto Google: </span> 
       <span item-end text-wrap class="end" *ngIf="navParams.get('rating') != undefined">{{navParams.get('rating')}}/5</span> 
       <span item-end text-wrap class="end" *ngIf="navParams.get('rating') == undefined">Nessuna valutazione!</span> 
      </div> 
      <div> 
       <span item-start text-wrap class="start">Voto Tripadvisor: </span> 
       <ion-spinner item-end text-wrap class="end" *ngIf="!loaded" name="dots"></ion-spinner> 
       <span item-end text-wrap class="end" *ngIf="loaded && rating != undefined">{{rating}}/5</span> 
       <span item-end text-wrap class="end" *ngIf="loaded && rating == undefined">Nessuna valutazione!</span> 
      </div> 
      </div> 
     </ion-list-header> 
     <ion-list> 
      <ion-item *ngFor="let recensione of reviews"> 
      <div class="center"> 
       <ion-avatar> 
       <img [src]="recensione.profile_photo_url"> 
       </ion-avatar> 
      </div> 
      <p class="name">{{recensione.author_name}}</p> 
      <div class="rating"> 
       <div class="star-ratings-sprite"> 
       <span [style.width]="(100*recensione.rating/5) + '%'" class="star-ratings-sprite-rating"></span> 
       </div> 
      </div> 
      <div *ngIf="recensione.title != undefined" class="title"> 
       <span text-wrap>{{recensione.title}}</span> 
      </div> 
      <span class="review" text-wrap>{{recensione.text}}</span> 
      <div class="date"> 
       <p>{{recensione.relative_time_description}}</p> 
      </div> 
      </ion-item> 
     </ion-list> 
     <ion-spinner *ngIf="!loaded"></ion-spinner> 
     <ion-infinite-scroll (ionInfinite)="scrapeNext($event)" threshold="1000px"> 
      <ion-infinite-scroll-content></ion-infinite-scroll-content> 
     </ion-infinite-scroll> 
     </div> 
    </div> 
    </div> 
</ion-content> 

:それは、次の1から除いて、自分のアプリケーション内のすべてのページのためだけで正常に動作し https://www.npmjs.com/package/ionic-cache

: 私は最近、データキャッシュを有効にするために私のアプリにこのモジュールを追加しました特定のレストランに関する情報やレビュー(レビューはイオンリスト内に表示されます)。 はレビューを取得するには、私は.TSファイルに次のコードを使用:

this.scraper.getTaReviews(this.navParams.get('name')) 
    .subscribe(data => { 
    console.log(data) 
    if (data != "no data") { 
     this.placeId = data.placeId; 
     this.risId = data.risId; 
     this.hasNext = data.hasNext; 
     this.rating = data.avgRating; 
     this.reviews = this.reviews.concat(data.reviews); 
     console.log(this.reviews); 
    } 
    this.loaded = true; 
    }) 

はもちろん、私は、コンストラクタで空の配列であることをレビュー変数を開始しました。コメントのない部分は新しいものである、とコメント部分は古い作業です

getTaReviews(ris: string) { 
    let request = this.http.get(this.hostname + ':8090/tarev?ris=' + ris + '&citta=' + this.share.getProvincia()).map(res => res.json()).retry(); 
    return this.cache.loadFromObservable(ris + "-" + this.share.getProvincia(), request); 
    // return this.http.get(this.hostname + ':8090/tarev?ris=' + ris + '&citta=' + this.share.getProvincia()).map(res => res.json()).retry(); 
    } 

これは、HTTP呼び出しを行うために呼び出される関数です。 私の問題は、初めてページを開いてデータを取得すると、すべてがうまく動作し、イオンリストのレビューが正しく表示されることです。しかし、キャッシュされたデータを使用すると、レビュー配列に正しいデータが含まれていても、リスト内のイオンアイテムにはデータが格納されません(コンソールログにチェックインしました)。前にも述べたように、イオンキャッシュを使用しないと正常に動作しますが、なぜこの動作がこのページにのみ影響するのかを説明することはできません。さらに、(レビュー以外の)キャッシュされたデータはすべて正しく表示され、ngForステートメントだけで問題があるように見えます。

答えて

0

私はこの問題を解決することができましたが、まだまだ変です。 このようにタイムアウトを追加すると完全に動作します。

this.scraper.getTaReviews(this.navParams.get('name')) 
     .subscribe(data => { 
     console.log(data) 
     if (data != "no data") { 
      this.placeId = data.placeId; 
      this.risId = data.risId; 
      this.hasNext = data.hasNext; 
      this.rating = data.avgRating; 
      setTimeout(_ => this.reviews = this.reviews.concat(data.reviews), 1000); 
      console.log(this.reviews); 
     } 
     this.loaded = true; 
     }) 
関連する問題