2017-03-13 25 views
2

我有一個離子列表與ngFor循環。下面是HTML:離子2 - 列表不更新

<ion-list> 
    <ion-item *ngFor="let kiosk of kiosks" (click)="goToKioskProfilePage(kiosk)"> 
     {{kiosk.name}} 
    </ion-item> 
</ion-list> 

這裏是構造函數:

kiosks: any; 

constructor(public navCtrl: NavController, navParams: NavParams, public locationTracker: LocationTracker, public api: ApiService, public zone: NgZone) { 

    this.kiosks = []; 

    this.zone.run(() => { 
     this.locationTracker.getGeolocation().then(location => { 
      this.api.getClosestKiosks(location, constants.AMOUNT_OF_CLOSEST_KIOSKS).then(
       data => { 
        console.log("ready"); 
        this.kiosks = data['data']; 
       }, 
       err => { 
        console.log(err); 
       } 
      ); 
     }); 
    }); 

} 

控制檯日誌「準備」,但該列表不會更新。我已經嘗試過與NgZone,但它仍然無法正常工作。只有當我打開sidemenu列表更新,但不是之前。有人知道如何解決這個問題?

+1

請問,如果你只是運行區內的分配(而不是整個地理定位調用)工作的呢?就像'this.zone.run(()=> {this.kiosks = data ['data'];}); ' – sebaferreras

+0

你不應該使用區域。它需要更新而不使用區域,所以問題必須在代碼的其他部分。也許亭必須公開? –

+0

@CarlosAdrián因爲一些異步方法正在被調用(因此,被外界angular2運行),你必須讓角度知道反正那東西已經改變和視圖必須被更新。如果'kiosk'屬性未公開,則在嘗試渲染視圖時應在控制檯中顯示錯誤。 – sebaferreras

回答

3

我以前也遇到過類似的問題。什麼固定它,我是隻把變量更新/分配在zone.run()之間的,因爲它是承諾解決您要更新的值之後。

嘗試:

this.locationTracker.getGeolocation().then(location => { 
    this.api.getClosestKiosks(location, constants.AMOUNT_OF_CLOSEST_KIOSKS).then(
     data => { 
      console.log("ready"); 
      this.zone.run(() => { 
       this.kiosks = data['data']; 
      }); 
     }, 
     err => { 
      console.log(err); 
     } 
    ); 
});