角度智能表分页跳过

时间:2015-07-09 18:27:40

标签: angularjs ajax pagination

编辑修复:关于使用此模块通过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,
    };
});

1 个答案:

答案 0 :(得分:1)

The OP wrote in an edit

  

我通过设置&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,看看控制台。

     

希望有所帮助。