2017-03-13 27 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); 
     } 
    ); 
});