我正在使用ngInfiniteScroll ng-module进行分页。当我向下滚动页面时,我将20条记录追加到我的数据表中。通过这样做,我实际上每次都会运行一个http请求(“对性能不好”)。
我一直在做一些研究,遇到了用ngInfiniteScroll添加LimitTo的问题。不确定如何实现这一点。有没有人能给我一些建议。
<table infinite-scroll='tF.loadMore()' infinite-scroll-disabled='tF.isBusy' infinite-scroll-distance='3' class="responsive">
<thead>
<tr>
<th>FIRST NAME</th>
<th>LAST NAME</th>
<th>USERNAME</th>
<th>EMAIL</th>
<th>CREATED DATE</th>
<th>STATUS</th>
<th>IS ONLINE</th>
<th>ACTIONS</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in tF.items | filter:searchFilter">
<td>{{item.FirstName}}</td>
<td>{{item.LastName}}</td>
<td>{{item.Username}}</td>
<td>{{item.Email}}</td>
<td>{{item.CreatedDate | date:'medium'}}</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
<tfoot ng-show='tF.isBusy'>
<tr>
<td colspan="9"><spinner show="tF.isBusy" /><span class="bold">{{tF.status}}</span> </td>
</tr>
</tfoot>
</table>/**** CONTROLLER.JS */
var vm = this;
var page = 0;
vm.items = [];
vm.isBusy = false;
vm.loadMore = function ()
{
if(vm.isBusy) return;
vm.isBusy = true;
userService.GetAllRecords(page)
.success(function (data)
{
var results = data;
for (var i = 0; i < results.length; i++)
{
vm.items.push(results[i]);
}
page++;
vm.isBusy = false;
}.bind(vm))
.error(function (error)
{
vm.status = 'Error retrieving data! ' + error.message;
})
.finally(function ()
{
vm.isBusy = false;
});
}发布于 2015-05-29 14:57:39
您可以一次加载所有数据,并在滚动时附加片段:
var vm = this;
var page = 0;
vm.currentItems = [];
var allData = [],
step = 10;
vm.loadData = function ()
{
userService.GetAllRecords(page)
.success(function (data)
{
allData = data;
vm.loadMore(); // Set first 10 items
})
.error(function (error)
{
vm.status = 'Error retrieving data! ' + error.message;
});
}
vm.loadMore = function () {
// Add more items to the currentItems
vm.currentItems = vm.currentItems.concat(allItems.slice(page*step, step));
page++;
}
vm.loadData();但这取决于你想要实现什么,为什么你想要这样做。如果大多数时候用户只需要看到前10个项目,那么我建议你每次想要加载更多的内容时都做一个http请求。如果用户通常滚动浏览所有项,那么一次加载所有数据可能是您想要的。
发布于 2015-05-29 14:36:03
我自己在一些应用程序中使用过这个模块,这就是如何将调用限制为只运行一次,直到数据返回为止。
js代码
vm.isBusy = false;
vm.loadMore = function() {
vm.isBusy = true;
userService.GetAllRecords(page).success(function(data) {
var results = data;
for (var i = 0; i < results.length; i++) {
vm.items.push(results[i]);
}
page++;
vm.isBusy = false;
});
}模板代码
<div infinite-scroll="loadMore()" infinite-scroll-distance="0" infinite-scroll-disabled="isBusy"></div>-
这是我上次使用此模块时编写的代码。
<div infinite-scroll="loadMoreArticles()" infinite-scroll-distance="0" infinite-scroll-disabled="loadingArticles"></div>
$scope.loadingArticles = false;
$scope.loadMoreArticles = function() {
$scope.loadingArticles = true;
return articlesFactory.getArticles($stateParams.feedType || 'feed', $stateParams.feed, lastArticle.id).then(function(data) {
$scope.articles = _.union($scope.articles, data);
if (data.length > 0) {
$scope.loadingArticles = false;
}
});
};https://stackoverflow.com/questions/30522603
复制相似问题