2014-10-07 11 views
7

Utworzyłem aplikację przy pomocy ng-table, aplikacja działa poprawnie, która wygenerowała tabelę przy użyciu tabeli ng. Problem, który napotykam, polega na tym, że sortowanie stołów nie działa. Mój kod jest jak podano poniżejsortowanie tabel nie działa

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> 

skryptu

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

Odpowiedz

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

stworzy nowy posortowanej tablicy, ale nie zmieni $scope.myValues.

Więc albo można ustawić $scope.myValues do posortowanej tablicy za każdym razem:

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

lub użyj $data w ng-repeat zamiast myValues:

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

dzięki łup ...... zadziałało !!!!! –

+0

Myślę, że użycie $ danych do pobierania pozycji nie jest oczywiście rozwiązaniem do aktualizacji danych tablicy. Używam tego, i nadal muszę zrobić filtr ręczny do mojej funkcji getData, aby zobaczyć mój sort zastosowany. thx za cynk – Alex

4

w HTML trzeba aktualizować myValues ​​być $ dane.

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

Plunker

+0

więc jeśli istnieją dwie tabele, to jak powiem Jakie dane należy podjąć –

+0

dzięki za odpowiedź –

3

Piszesz do $scope.myValues i używając że w dyrektywie ng-repeat - ale jesteś sortowania danych tylko w getData() na stole params obiektu.

getData() nigdy się nie zmienia $scope.myValues, służy tylko do zwracania posortowanej tablicy. Co naprawdę chcesz zrobić to:

  • Nie rób pełny zestaw danych dostępnych w zasięgu, ale należy go przechowywać w zmiennej wewnątrz kontrolera:

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

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

  • Użyj $data w kodzie HTML, ponieważ właśnie do tego dostęp ma getData():

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

+0

dzięki za odpowiedź .......... –

Powiązane problemy