2016-12-19 4 views
0

я взял ngTable примера изУгловая сортировки Таблицы не работает, если я использую различный API

http://ng-table.com/#/loading/demo-external-array

открыл его в коде пере и вместо «/ данных» я использую АНЮ

https://jsonplaceholder.typicode.com/posts

и добавил IsArray: истинный

var Api = $resource("https://jsonplaceholder.typicode.com/posts", {}, { 
    'get': { method: 'GET', isArray: true} 
}); 

В html я достал все столбцы и сохранил колонку «id» для простоты

загружает столбец id, но поиск сортировки не работает.

что я делаю неправильно?

измененная ручка здесь

http://codepen.io/raasmasood/pen/zoeMgx

+0

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

+0

хорошо позвольте мне проверить –

+0

я устал он. это не сработало. Я думаю, что есть что-то с обещанием. Я точно не знаю. –

ответ

0

http://codepen.io/anon/pen/rWRNjQ

вы могли проверить эту codepen, теперь он работает. ;)

getData: function(params) { 
    // ajax request to api 
    return Api.get(params.url()).$promise.then(function(data) { 
    params.total(100); // recal. page nav controls 
    return ($filter('orderBy')(data, params.orderBy())); 
     //return data; 
    }); 
    } 

Ранее мы пропустили часть фильтра.

return $filter('filter')($filter('orderBy')(data, params.orderBy()),params.filter()); 

для включения фильтра тоже :)

+0

его отлично. сортировочные работы. но фильтр не работает, когда мы его очищаем. –

+0

Я думаю, что эта же проблема упомянута в ответе выше. –

+0

Это сложный вопрос http://codepen.io/anon/pen/rWRNjQ, это сделает работу. Обновили функцию getData. – LINTUism

0

У меня была такая же проблема, и в конечном итоге делает сортировки/фильтр/подкачки вручную:

var app = angular.module("myApp", ["ngTable", "ngResource", "ngTableDemoFakeBackend"]); 
(function() { 

    app.controller("demoController", demoController); 
    demoController.$inject = ["NgTableParams", "$resource", "$filter"]; 

    function demoController(NgTableParams, $resource, $filter) { 
    //var Api = $resource("/data"); 
    var Api = $resource("https://jsonplaceholder.typicode.com/posts", {}, { 
     // Let's make the `query()` method cancellable 
     query: {method: 'get', isArray: true, cancellable: true} 
    });   

    this.tableParams = new NgTableParams({  
     count: 5 
    }, { 

     getData: function(params) { 
     // ajax request to api 
     return Api.query().$promise.then(function(data) { 

     params.total(data.length); // recal. page nav controls 

      var filteredData = params.filter().id ? 
         $filter('filter')(data, params.filter()) : 
         data; 

      var orderedData = params.sorting() ? 
       $filter('orderBy')(filteredData, params.orderBy()) : data; 
      var page = orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()); 

      return page; 
     }); 
     } 
    }); 

    } 
})(); 

Недостатком этого подхода является, поскольку вы используя фильтрацию, чем больше столбцов вы добавляете, тем больше проверок вам нужно делать, потому что, как он работает, когда вы очищаете фильтр, он не будет устанавливать этот объект в неопределенный. Это создаст объект вроде этого:

{ id: null } 

означает, что вы не можете использовать params.filter() в этой строке:

var filteredData = params.filter().id ? 
        $filter('filter')(data, params.filter()) : 
        data; 
+0

точно. Я должен был включить $ watch, чтобы заставить его работать. но все еще ищет решение без руководства –

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