2014-10-07 2 views
7

Я создал приложение, использующее ng-таблицу, приложение работает нормально, сгенерировав таблицу, используя ng-таблицу. Проблема, с которой я сталкиваюсь, заключается в том, что сортировка таблицы не работает. Мой код, как указано нижеСортировка ng-table не работает

Working Demo

HTML

<table ng-table="tableParams" class="table"> 
     <tr ng-repeat="user in myValues"> 
      <td data-title="'Name'" sortable="'name'"> 
       {{user.name}} 
      </td> 
      <td data-title="'Age'" sortable="'age'"> 
       {{user.age}} 
      </td> 
     </tr> 
</table> 

сценария

var app = angular.module('main', ['ngTable']). 
controller('DemoCtrl', function($scope, $filter, ngTableParams) { 
    $scope.myValues = [{name: "Moroni", age: 50}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}]; 

    $scope.tableParams = new ngTableParams({ 
     sorting: { 
      name: 'asc'  
     } 
    }, { 
     getData: function($defer, params) { 
      $defer.resolve($filter('orderBy')($scope.myValues, params.orderBy())); 
     } 
    }); 
}); 

ответ

17
$defer.resolve($filter('orderBy')($scope.myValues, params.orderBy())); 

создаст новый отсортированный массив, но не изменит $scope.myValues.

Так как вы установите $scope.myValues в отсортированном массиве каждый раз:

$scope.myValues = $filter('orderBy')($scope.myValues, params.orderBy()); 
$defer.resolve($scope.myValues); 

Или использовать $data в ng-repeat вместо myValues:

<tr ng-repeat="user in $data"> 
+0

спасибо за добычу ...... это сработало !!!!! –

+0

Я думаю, что использование $ data для извлечения элементов не является, очевидно, решением для обновления данных массива. Я использую это, и мне все еще нужно сделать ручной фильтр в моей функции getData, чтобы увидеть, как применяется моя сортировка. thx для наконечника – Alex

4

В вашем HTML вам нужно обновить myValues ​​быть $ данных.

<tr ng-repeat="user in $data"> 

Plunker

+0

так что если есть две таблицы, то как я скажу какие данные следует принять –

+0

ответ –

3

Вы пишете $scope.myValues, и используя, что в директиве ng-repeat - но вы сортирует данные только в getData() на столе Params объекта.

getData() не меняет $scope.myValues, он использует его только для возврата отсортированного массива. То, что вы действительно хотите сделать это:

  • Не делайте полный набор данных, доступных на сферу, но сохранить его в переменной внутри контроллера:

var data = [{name: "Moroni", age: 50}, ...]

$defer.resolve($filter('orderBy')(data, params.orderBy()));

  • Используйте код $data внутри HTML-кода, потому что это то, что обращается к getData():

<tr ng-repeat="user in $data">

+0

спасибо за ответ .......... –