2013-04-28 47 views
124
<div class="recent" ng-repeat="reader in 
    (filteredItems = (book.reader | orderBy: 'created_at' | limitTo: 1))"> 
</div> 

Vì vậy, cuốn sách đến từ phần còn lại và nó có nhiều độc giả đính kèm. Tôi muốn có được người đọc 'gần đây'.Thứ tự giảm dần theo bộ lọc ngày trong AngularJs

Trường created_at có giá trị xác định người dùng là gần đây. Nhưng đoạn mã trên cho tôi người đọc lâu đời nhất. Vì vậy, thứ tự cần phải được đảo ngược? Có cách nào để phân loại theo thứ tự giảm dần không?

Trả lời

191

Theo documentation bạn có thể sử dụng đối số reverse.

filter:orderBy(array, expression[, reverse]); 

Thay đổi bộ lọc của bạn để:

orderBy: 'created_at':true 
+20

Lưu ý nó ':' không phải là một dấu phẩy. (Đối với những người không quan sát khác) – ReactiveRaven

+1

Nếu bạn muốn có một nút sắp xếp, bạn có thể thay thế đúng với sortDirection. Sau đó, trong phạm vi của bạn thiết lập $ scope.sortDirection = true. Nút bấm sẽ trông giống như ng-click = "sortDirection =! SortDirection" – mbokil

+1

Đây là chỉ làm việc cho các trang có dữ liệu bảng đầy đủ trong một trang duy nhất, nhưng nó sẽ không làm việc cho các pagination .. – ANK

162

Bạn có thể thêm tiền tố lập luận trong orderBy với một '-' để có thứ tự giảm dần thay vì tự tăng dần. Tôi sẽ viết như sau:

<div class="recent" 
    ng-repeat="reader in book.reader | orderBy: '-created_at' | limitTo: 1"> 
</div> 

Điều này cũng được nêu trong tài liệu cho bộ lọc orderBy.

+4

Cảm ơn bạn, đây là một cách nhanh chóng và dễ dàng để đảo ngược thứ tự. – LukeP

+0

Xóa cú pháp. Tôi thích nó –

16

Và một ví dụ mã:

<div ng-app> 
    <div ng-controller="FooController"> 
     <ul ng-repeat="item in items | orderBy:'num':true"> 
      <li>{{item.num}} :: {{item.desc}}</li> 
     </ul> 
    </div> 
</div> 

Và JavaScript:

function FooController($scope) { 
    $scope.items = [ 
     {desc: 'a', num: 1}, 
     {desc: 'b', num: 2}, 
     {desc: 'c', num: 3}, 
    ]; 
} 

sẽ cung cấp cho bạn:

3 :: c 
2 :: b 
1 :: a 

On JSFiddle: http://jsfiddle.net/agjqN/

39

Có lẽ điều này có thể usef ul cho ai đó:

Trong trường hợp của tôi, tôi đã nhận được một mảng các đối tượng, mỗi đối tượng chứa ngày được thiết lập bởi Mongoose.

tôi đã sử dụng:

ng-repeat="comment in post.comments | orderBy : sortComment : true" 

Và định nghĩa chức năng:

$scope.sortComment = function(comment) { 
    var date = new Date(comment.created); 
    return date; 
}; 

này đã làm việc cho tôi.

+1

Cảm ơn bạn. Ngày của tôi là các chuỗi được nhập vào định dạng MMMM dd, YYYY và tôi không thể tìm ra cách để có được góc cạnh để sắp xếp chúng một cách chính xác trừ khi tôi đã sử dụng phương thức tạo đối tượng ngày. Làm việc như người ở. – Zargoon

+0

Đây là phương pháp chính xác .. chúng tôi có thể sử dụng phương pháp này ở bất kỳ định dạng ngày nào .. cảm ơn ông chủ – Jethik

+0

Tôi yêu bạn! cảm ơn! –

2

Trong trường hợp của tôi, orderBy được xác định bằng một hộp chọn. Tôi thích câu trả lời của Ludwig vì bạn có thể thiết lập theo hướng sắp xếp trong các tùy chọn chọn như vậy:

 $scope.options = [ 
      { label: 'Title', value: 'title' }, 
      { label: 'Newest', value: '-publish_date' }, 
      { label: 'Featured', value: '-featured' } 
     ]; 

đánh dấu:

<select ng-model="orderProp" ng-options="opt as opt.label for opt in options"></select> 
<ul> 
    <li ng-repeat="item in items | orderBy:orderProp.value"></li> 
</ul> 
+1

điều này dường như không hoạt động với các chức năng sắp xếp tùy chỉnh. Có cách nào để đảo ngược sắp xếp khi sử dụng chức năng orderBy tùy chỉnh và chọn tham số để đặt hàng theo số từ