Я использую пользовательские данные из файла .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>
Вы уверены, что это связано с тем, что ваш источник представляет собой файл 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 будет означать, что значения вложенных настроек (например,
dataOptions) никогда не будет неопределенным
В среду, 21 декабря 2016 г., в 19:19, Мария Инес Парнисари <
уведомления@github.com> написал:
Хорошо, я исправил это, потому что dataOptions может быть неопределенным. Итак, код
должно бытьесли (settings.dataOptions && !settings.dataOptions.applyPaging) {
вернуть ngTableDefaultGetData (результат, параметры);
}—
Вы получаете это, потому что подписаны на эту тему.
Ответьте на это письмо напрямую, просмотрите его на 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());
Простой обходной путь для этого также состоит в том, чтобы установить страницу в 1 в функции getData после того, как вы получили данные, кэшируете фактическую страницу и сбрасываете в перехватчике.
После применения предложенного исправления у меня перестала работать фильтрация. Чтобы исправить это, в приведенных выше строках мне пришлось установить 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({ значение
: sortDirection
});
результат = orderByFn(result, orderBy);
}
if (!settings.dataOptions.applyPaging) {
return ngTableDefaultGetData(result, params);
}
return ngTableDefaultGetData.applyPaging(результат, параметры);`
Самый полезный комментарий
Хорошо, я исправил это, потому что
dataOptions
может бытьundefined
. Так что код должен быть