编辑修复:关于使用此模块通过ajax加载数据并进行排序,过滤和分页工作,有一个不相关的说明。它需要额外的步骤,而不是使用对象数组的99.9%的示例。更糟糕的是如果你已经让它像这样工作了,因为你认为智能表可以处理所有事情。它没有。
原始问题:
有人可以帮我弄清楚为什么桌子会跳过第2页和第4页的分页。我创建了一个使用大量评论的插件,如果你在控制台中观看,它会显示流入的数据和被过滤掉了。排序和搜索工作,'过滤'数组中包含数据,我可以通过搜索甚至排序找到第2页和第4页的数据,但不能点击第2或第4页。
http://plnkr.co/edit/LVDvjjO6NGGjlBBQEIed?p=preview
这是没有评论疯狂的工厂:
app.factory('mongodbApi', function($http, $q, $filter) {
// CAN ADD OTHER APIs HERE TO TEST OUTSIDE OF
// EXPRESS.JS
// GET
var getRecords = function(url, start, number, params) {
var defer = $q.defer();
$http.get(url)
.success(function(res) {
var filtered = params.search.predicateObject ? $filter('filter')(res, params.search.predicateObject) : res;
if (params.sort.predicate) {
filtered = $filter('orderBy')(filtered, params.sort.predicate, params.sort.reverse);
}
result = filtered.slice(start, start + number)
// why is this skipping 5 items?
defer.resolve({
data: result,
numberOfPages: Math.ceil(res.length / number)
});
})
.error(function(err) {
defer.reject(err);
});
return defer.promise;
};
return {
getRecords: getRecords,
};
});
答案 0 :(得分:1)
我通过设置&st; items-by-page =" 5"'来修复它。在st-pagination div。请继续阅读,因为它有点复杂。
所以我的索引'开始'当我点击第2页时变量增加10,当我点击第3页时设置为20.根据源默认值:
pagination: { template: 'template/smart-table/pagination.html', itemsByPage: 10, displayedPages: 5 }
我认为通过将我的start设置为0并将tableState.pagination.number设置为5,smart-tables会知道我想要每页5个项目,但它确实没有相应地增加起始索引值。你实际上必须平衡价值观。这可能应该在文档中更新。它并没有永远弄清楚,但是我已经把这个模块弄乱了几个星期了。
关于AJAX CALLS的注释
对于有兴趣使用ajax的人,必须在表上使用st-pipe指令。当您执行任何操作,排序,过滤或更改页面时,将调用此选项,它将从服务器获取最新数据。根据ajax / pipe部分下的文档,您可以看到如何执行99%的文档。请注意,您将在tableState.search和tableState.sort上设置$ filter,并将此对象的结果切片从您的ajax promise中传回。就像我在这里写的那样,你必须平衡tableState值。
AGAIN,itemByPage是您返回到表格的数组上的INDEX,即WHERE开始显示,tableState.pagination.number是每页显示的行项目,即显示多少。
对于那些人来说,可能很平常。经验丰富的程序员尤其是Angular的程序员可能会大笑。我可以不在乎说实话我学会了#39; Angular 2个月前。玩得开心,快乐的ajaxing,使用plunker,看看控制台。
希望有所帮助。