2014-10-07 13 views
7

Tôi đã tạo một ứng dụng bằng ng-table, ứng dụng hoạt động tốt đã tạo bảng bằng ng-table. Vấn đề mà tôi đang phải đối mặt là việc phân loại bảng không hoạt động. Mã của tôi là như đưa ra dưới đâysắp xếp ng-bảng không hoạt động

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> 

kịch bản

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

Trả lời

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

sẽ tạo ra một mảng được sắp xếp mới nhưng sẽ không thay đổi $scope.myValues.

Vì vậy, một trong hai, bạn thiết lập $scope.myValues đến các mảng được sắp xếp mỗi lần:

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

Hoặc sử dụng $data trong ng-repeat thay vì myValues:

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

nhờ một loot ...... nó làm việc !!!!! –

+0

Tôi nghĩ rằng việc sử dụng dữ liệu $ để tìm nạp các mục không rõ ràng là một giải pháp để cập nhật dữ liệu mảng. Tôi sử dụng điều này, và tôi vẫn phải làm một bộ lọc thủ công vào hàm getData của tôi để xem sắp xếp của tôi được áp dụng. thx cho tip – Alex

4

Trong HTML của bạn, bạn cần phải cập nhật myValues ​​là $ dữ liệu.

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

Plunker

+0

vì vậy nếu có hai bảng thì làm sao sẽ i nói những dữ liệu được thực hiện –

+0

cảm ơn cho câu trả lời –

3

Bạn đang viết để $scope.myValues, và sử dụng rằng trong chỉ thị ng-repeat - nhưng bạn sắp xếp các dữ liệu chỉ trong getData() trên đối tượng bảng params.

getData() không bao giờ thay đổi $scope.myValues, nó chỉ sử dụng nó để trả về một mảng được sắp xếp. Những gì bạn thực sự muốn làm là:

  • Đừng làm cho toàn bộ dữ liệu có sẵn trên phạm vi, nhưng lưu nó trong một biến bên trong bộ điều khiển:

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

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

  • Sử dụng $data bên trong mã HTML, vì đây là những gì truy cập getData():

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

+0

cảm ơn cho câu trả lời .......... –

Các vấn đề liên quan