【发布时间】:2014-10-12 16:51:34
【问题描述】:
我对由异步请求填充的 Ionic 列表有疑问。
在 HTML 中我有以下内容:
<ion-list class="list" ng-init="setDateRange('today');" >
<!--IF NO ITEM IS FOUND -->
<ion-item class="listCenter" ng-if="listData.length == 0 || listData.length == null">
<h2>No data found, try to make few calls</h2>
</ion-item>
<ion-item class="item" ng-repeat="listDataItem in listData">
<!--HTML CONTENT OF ITEM REMOVED FROM EXAMPLE -->
</ion-item>
<ion-infinite-scroll
icon="ion-loading-c"
distance="10%"
on-infinite="setDateRange('past')">
</ion-infinite-scroll>
</ion-list>
在 ng-init 中调用 setDateRange 方法,该方法在数据库的分离方法中触发异步请求。
我认为,这个问题可能出在 updateList 和 createList 中的 $broadcast 方法 scroll.infiniteScrollComplete 的实现中,这些方法如下。
$scope.updateList = function() {
console.log('Trying to update list');
$timeout(function() {
$scope.$apply(function() {
listData.forEach(function(item){
$scope.listData.push(item);
console.log("List length is "+ $scope.listData.length);
});
$ionicLoading.hide();
});
$scope.$broadcast('scroll.infiniteScrollComplete'); // should be removed in production
$scope.$broadcast('scroll.resize');
});
};
$scope.createList = function() {
console.log('Trying to render list');
alert("render");
$timeout(function() {
$scope.$apply(function() {
$scope.listData = listData;
console.log("List length is "+ $scope.listData.length);
});
// Infinite scroll broadcast should be here to avoid
// triggering of the on-infinite event
$scope.$broadcast('scroll.infiniteScrollComplete');
});
$ionicLoading.hide();
};
因为在 ng-init 期间也触发了 updateList 方法,因为此时 $scope.listData 不存在,所以无法完成。
谁能告诉我如何实现
$scope.$broadcast('scroll.infiniteScrollComplete')
和
$scope.$broadcast('scroll.resize');
以正确的方式?
感谢您的帮助。
【问题讨论】:
标签: javascript angularjs scrollview ionic-framework