我创建了一个包含离子列表的页面,并且有两个按钮,如果单击该按钮,它将调用firebase api并进行更新。更新后,整个列表都会刷新。如何停止刷新整个列表。
onLocationDataUpdate() {
// Get current location
this.geolocation.getCurrentPosition().then(position => {
this.location.lat = position.coords.latitude;
this.location.lng = position.coords.longitude;
// Get location data from Firebase
this.connectivityServiceService.getLocations(
this.locatingRange,
this.location.lat,
this.location.lng
);
// Bind data to Ionic list
this.dataSetSubscription = this.connectivityServiceService.geoPointLocationUpdateNotify.subscribe(
locations => {
const locationData = this.connectivityServiceService.getGeoPointLocations();
if (locationData.length > this.maxDataCount) {
const tempLocationData = locationData.slice(0, this.maxDataCount);
tempLocationData.forEach(item => {
if (item.feed_back === undefined) {
item = Object.assign(item, {
feed_back: { count: 0, positive: [], negative: [] }
});
}
});
this.geoPointLocationData = tempLocationData;
this.loader.dismiss();
} else {
const tempLocationData = locationData;
tempLocationData.forEach(item => {
if (item.feed_back === undefined) {
item = Object.assign(item, {
feed_back: { count: 0, positive: [], negative: [] }
});
}
});
this.geoPointLocationData = tempLocationData;
this.loader.dismiss();
}
}
);
});
}
答案 0 :(得分:1)
我知道您已经解决了这个问题,但是您确实在这里遇到了一些问题。
只需将新数据推送到模型,您将看到它已更新,但实际上它正在重新创建整个列表。
如果数据太长,则可能会导致性能问题。此时,您应该查看trackBy
。
这是一种为Angular提供跟踪列表中每个项目的方法,以便在更新项目时,Angular可以找出实际需要更新的项目,而只需对其进行更改。