Angular Table 如果我使用不同的 api 排序不起作用

Angular Table sorting does not work if i use a different api

我从

中获取了 ngTable 示例

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

用代码笔打开它,我使用的是 api

而不是“/data”

https://jsonplaceholder.typicode.com/posts

并添加了 isArray : true

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

在 html 中,为了简单起见,我取出了所有列并保留了 "id" 列

它加载了 id 列,但搜索排序不起作用。

我做错了什么?

换笔来了

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

我遇到了同样的问题,最后手动执行了 sort/filter/paging:

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;

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

您可以查看此代码笔,现在可以使用了。 ;)

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());

也用于启用过滤器:)