Проблемы с фильтром нумерации страниц angular ngTable

'use strict';
function NumbersCtrl(DAO, $rootScope, $scope, $filter, ngTableParams) {
$rootScope.getAllNumbers = function () {
    //get all

    $rootScope.errors.errorMessages=[];
     DAO.query({appName: $rootScope.appConfig.appName, token: $rootScope.appConfig.token, controller: 'numbers', action: 'list'},   
                $rootScope.loadingSite=true,
                function (result) {
         $rootScope.numberss = result;

         $scope.tableParams = new ngTableParams({
            page: 1,            // show first page
            count: 10,           // count per page
            sorting: {
                id : 'desc' // initial sorting
            }
     }, {
        total: $rootScope.numberss.length,
     getData: function($defer, params) {
            var putIt  = params.sorting() ? $filter('orderBy')( $rootScope.numberss, params.orderBy()): id;
            params.total(putIt.length);
               $defer.resolve(putIt.slice((params.page() - 1) * params.count(), params.page() * params.count()));
            // $rootScope.numberss = sendIt;
            //$rootScope.numberss=putIt.slice((params.page() - 1) * params.count(), params.page() * params.count());
            //$defer.resolve(putIt.slice((params.page() - 1) * params.count(), params.page() * params.count()));

            //$rootScope.numberss = putIt;
     }
     });
}

Я работаю над плагином Grails-arrested-plugin и столкнулся с камнем преткновения, поэтому любой совет оценил:

Итак, выше мой вызов контроллера - у меня есть несколько закомментированных попыток получить информацию обратно, разбитую на страницы - упорядоченную с фильтрацией.

до сих пор у меня есть попытка полуразбиения на страницы работать, и если я использую:

$rootScope.numberss=putIt.slice((params.page() - 1) * params.count(), params.page() * params.count());

Вышеприведенное на самом деле возвращает только первые 10 результатов, но не страницы.

$defer.resolve(putIt.slice((params.page() - 1) * params.count(), params.page() * params.count()));

не работает, но опять же, это не задокументированный способ ведения дел, поскольку DAO - это вызов отдыха:

use strict';
angular.module('services',['ngResource','ngTable']).
    factory('DAO', function($resource){
        return $resource('/:appName/:controller/:action',{
            format:'json', callback:'JSON_CALLBACK'},{
          ..
            'query': {method:'GET', params:{appName:'@appName', controller:'@controller', action:'@action', token:'@token'}, isArray: true, timeout:20000},

person V H    schedule 25.05.2014    source источник
comment
все работает, скоро будет обновлен ответ   -  person V H    schedule 25.05.2014


Ответы (1)


Хорошо, теперь у меня есть нумерация страниц, работающая с двумя способами вызова / плюсы-минусы? из того, что я прочитал, первый объясненный метод делает меньше вызовов:

Помимо исправления фактическая фильтрация все еще не работает, поэтому, если кто-нибудь может указать, что нужно сделать, чтобы исправить фильтр, было бы здорово:

Итак, инициализация страниц

<div data-ng-controller="NumbersCtrl"  data-ng-init="getAllNumbers()">

Затем контроллер выполняет на нем функцию

$rootScope.getAllNumbers = function () {
        //get all
        $rootScope.errors.errorMessages=[];
         DAO.query({appName: $rootScope.appConfig.appName, token: $rootScope.appConfig.token, controller: 'numbers', action: 'list'},   
            $rootScope.loadingSite=true,
            function (result) {
                $rootScope.tableParams = new ngTableParams({
                    page: 1,            // show first page
                    count: 10,           // count per page
                    sorting: {
                        id : 'desc' // initial sorting
                    }
                }, {
                    total: result.length,
                    getData: function($defer, params) {
                        $rootScope.numberss  = params.sorting() ? $filter('orderBy')(result, params.orderBy()): id;
                        //params.total(putIt.length);
                        $defer.resolve($rootScope.numberss.slice((params.page() - 1) * params.count(), params.page() * params.count()));
                        $rootScope.numberss=($rootScope.numberss.slice((params.page() - 1) * params.count(), params.page() * params.count()));
                    }
                });
                $rootScope.loadingSite=false;   
            },
            function (error) {
                $rootScope.errors.showErrors = true;
                $rootScope.errors.showServerError = true;
                $rootScope.errors.errorMessages.push(''+error.status+' '+error.data);
                $rootScope.loadingSite=false;
             });

    };

В итоге я использовал этот метод, так как ничего не инициализирую:

<div data-ng-controller="NumbersCtrl" >

и вызов этого действия контроллера (в соответствии с инструкциями по умолчанию для ngtable, то есть его вызовами по умолчанию, которые также существовали бы в указанном выше методе:

$rootScope.tableParams = new ngTableParams({
    page: 1,            // show first page
    count: 10,           // count per page
    sorting: {
        id : 'desc' // initial sorting
    }
}, {
    getData: function($defer, params) {
        DAO.query({appName: $rootScope.appConfig.appName, token: $rootScope.appConfig.token, controller: 'numbers', action: 'list'},    
            $rootScope.loadingSite=true,
                function (result) {
                    $rootScope.numberss=result;
                    var putIt  = params.sorting() ? $filter('orderBy')($rootScope.numberss, params.orderBy()): id;
                    params.total(putIt.length);
                    $defer.resolve(putIt.slice((params.page() - 1) * params.count(), params.page() * params.count()));
                    $rootScope.numberss=(putIt.slice((params.page() - 1) * params.count(), params.page() * params.count()));
                    $rootScope.loadingSite=false;   
                },
                function (error) {
                    $rootScope.errors.showErrors = true;
                    $rootScope.errors.showServerError = true;
                    $rootScope.errors.errorMessages.push(''+error.status+' '+error.data);
                    $rootScope.loadingSite=false;
                });
    }
});

Фактическим исправлением является последний вызов в разделе defer:

$defer.resolve($rootScope.numberss.slice((params.page() - 1) * params.count(), params.page() * params.count()));
                            $rootScope.numberss=($rootScope.numberss.slice((params.page() - 1) * params.count(), params.page() * params.count()));

HTML-страница, содержащая эту таблицу, вызывается здесь:

https://github.com/vahidhedayati/testingarrested/blob/master/grails-app/views/numbers/list.gsp

Угловой контроллер здесь:

https://github.com/vahidhedayati/testingarrested/blob/master/web-app/js/NumbersCtrl.js

Через мгновение я обновлю ветку, которая будет содержать все это -

Итак, резюмируя работу фильтрации разбиения на страницы, нет - теперь это должно быть что-то второстепенное.

Редактировать: Для доработки - все работает, чего мне не хватало:

putIt = params.filter ? $filter('filter')( putIt, params.filter()) :  putIt;

под first putIt - поиск/разбиение на страницы работает через остальные вызовы

person V H    schedule 25.05.2014