Ng-table: разбиение на страницы не работает с пользовательскими данными из файла json

Созданный на 2 авг. 2016  ·  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 будет означать, что значения вложенных настроек (например,
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(результат, параметры);`

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

zeeshanhanif picture zeeshanhanif  ·  5Комментарии

muhlegg picture muhlegg  ·  29Комментарии

Ebolon picture Ebolon  ·  12Комментарии

alienriquebm picture alienriquebm  ·  6Комментарии

Nagendra1402 picture Nagendra1402  ·  3Комментарии