Ng-table: 分页不适用于 json 文件中的自定义数据

创建于 2016-08-02  ·  10评论  ·  资料来源: esvit/ng-table

我正在使用 .json 文件中的自定义数据并希望对数据进行分页,但所有数据都在单页中; 为什么这样? 下面是我的代码

 $http.get('app/user_keys.json').success(function(data) {
            vm.data = data;
            vm.tableParams = new NgTableParams({ page: 1, count: 2 }, {
                    total: vm.data.length,
                    getData: function (params) {
                        console.log(vm.data.length);
                        var deferred = $q.defer();
                        var orderedData = params.sorting() ? $filter('orderBy')(vm.data, params.orderBy()) : vm.data;
                        deferred.resolve(orderedData.slice((params.page() - 1) * params.count(),  params.page() * params.count()));
                    }
                });
        });
<table ng-table="vm.tableParams" class="table table-striped" >
                    <colgroup>
                          <col width="5%"/>
                          <col width="30%"/>
                          <col width="50%"/>
                          <col width="15%"/>
                    </colgroup>
                    <tr ng-repeat="row in vm.data | filter: searchText  track by $index">
                        <td header="'headerCheckbox.html'">
                        <input type="checkbox" value="row._id" ng-model="vm.checkboxes.items[row._id]" ></td>
                        <td data-title="'ID'">{{ row.index }}</td>
                        <td data-title="'Cloud Location'">{{ row.location }}</td>
                        <td data-title="'Action'"><i class="fa fa-trash"></i></td>
                    </tr>
                </table>

最有用的评论

好的,我修复了它,这是因为dataOptions可能是undefined 。 所以代码应该是

 if (settings.dataOptions && !settings.dataOptions.applyPaging) {
   return ngTableDefaultGetData(result, params);
 }

所有10条评论

您确定这与您的源是 JSON 文件这一事实有关吗?
我认为我遇到了同样的问题,尽管我的数据源是一项服务。

该服务返回一个承诺,当它解决时,我设置params.total() ,如返回结果之前的文档中所述,但分页仍然不起作用。

在对组数据进行分页时,我遇到了同样的问题。 所以,我在getGroups函数的末尾添加了这些行。

if (!settings.dataOptions.applyPaging) {
    return ngTableDefaultGetData(result, params);
}
return ngTableDefaultGetData.applyPaging(result, params);

使用默认或自定义的分页。

是的,这与我在 #872 中提到的解决方案几乎相同。 我不确定settings.dataOptions.applyPaging检查是否重要,因为它在上面的某些行中手动设置为 false。

@fsm3xpert@tandibar ,我应用了@fsm3xpert提出的解决方案并且它有效,但我在控制台中得到以下信息:

Possibly unhandled rejection: {}

有任何想法吗?

好的,我修复了它,这是因为dataOptions可能是undefined 。 所以代码应该是

 if (settings.dataOptions && !settings.dataOptions.applyPaging) {
   return ngTableDefaultGetData(result, params);
 }

顺便说一句,ng-table 的未来版本将意味着嵌套设置值(EG
dataOptions) 永远不会未定义

2016 年 12 月 21 日星期三晚上 7:19,María Inés Parnisari <
通知@github.com> 写道:

好的,我修复了它,这是因为 dataOptions 可能未定义。 所以代码
应该

if (settings.dataOptions && !settings.dataOptions.applyPaging) {
返回 ngTableDefaultGetData(result, params);
}


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看
https://github.com/esvit/ng-table/issues/893#issuecomment-268614815或静音
线程
https://github.com/notifications/unsubscribe-auth/AA2HPk4I47xMpIlEbXSDSCMUu0mlGn7Vks5rKXu4gaJpZM4Jagxg
.

万一有人像我一样遇到同样的问题,即无论出于何种原因更改库代码都不是一种选择,我找到了一种解决方法:

问题似乎是没有实现分组来处理分页数据。 我最终做的是检索所需页面的数据并将项目总数缓存在变量中。
actualTotal = params.total()
然后我实现了一个响应拦截器,如http://ng-table.com/#/global -customization/demo-response-interceptors 中所述。 在那里我可以将总值设置回缓存值。 这修复了分页的显示。

还有一个问题,即如果用户尝试转到 1 以外的另一个页面,您将看不到任何内容,因为分组使用以下代码对数据数组进行切片:
var pagedData = data.slice((params.page() - 1) * params.count(), params.page() * params.count());
简单的解决方法是在获取数据后在 getData 函数中将页面设置为 1,缓存实际页面并在拦截器中重置。

应用建议的修复程序后,过滤停止为我工作。 为了修复它,在上面的行中,我必须像这样设置dataOptions

settings.dataOptions = { applyPaging: false, applyFilter: false };

此修复程序在最新版本中可用吗? 如果不是在哪一行需要添加。

它在上一个版本中不可用。
我得到它的工作修改这部分代码:
if (sortDirection) {
var orderByFn = ngTableDefaultGetData.getOrderByFn();
var orderBy = util_1.convertSortToOrderBy({
value: sortDirection
});
result = orderByFn(result, orderBy);
}
return ngTableDefaultGetData.applyPaging(result, params);

有了这个:
if (sortDirection) {
var orderByFn = ngTableDefaultGetData.getOrderByFn();
var orderBy = util_1.convertSortToOrderBy({
value: sortDirection
});
result = orderByFn(result, orderBy);
}
if (sortDirection) { var orderByFn = ngTableDefaultGetData.getOrderByFn(); var orderBy = util_1.convertSortToOrderBy({ value: sortDirection }); 结果 = orderByFn(result, orderBy); } if (!settings.dataOptions.applyPaging) { return ngTableDefaultGetData(result, params); } return ngTableDefaultGetData.applyPaging(result, params);`

此页面是否有帮助?
0 / 5 - 0 等级