Thứ tự giảm dần theo bộ lọc ngày trong AngularJs


139
<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 api và nó có nhiều độc giả kèm theo. Tôi muốn có được người đọc 'gần đây'.

Các created_atlĩnh vực có giá trị trong đó xác định người sử dụng như gần đây. Nhưng đoạn mã trên cho tôi người đọc lâu đời nhất. Vậy thứ tự cần phải đảo? Có cách nào để sắp xếp theo thứ tự giảm dần không?

Câu trả lời:


219

Theo tài liệu bạn có thể sử dụng các reverseđối số.

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

Thay đổi bộ lọc của bạn thành:

orderBy: 'created_at':true

21
Lưu ý nó :không phải là dấu phẩy. (Dành cho 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ế true bằng sortDirection. Sau đó, trong phạm vi của bạn, đặt $ scope.sortDirection = true. Nút bấm sẽ trông giống như ng-click = "sortDirection =! SortDirection"
mbokil 23/2/2016

1
Chúng chỉ hoạt động đối với trang có dữ liệu bảng hoàn chỉnh trong một trang, nhưng nó sẽ không hoạt động cho phân trang ..
ANK

liên kết đến tài liệu bị hỏng
robert

180

Bạn có thể thêm tiền tố vào đối số orderBybằng '-' để có thứ tự giảm dần thay vì tăng dần. Tôi sẽ viết nó như thế này:

<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 .


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

41

Có lẽ điều này có thể hữu ích 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 một ngày được đặt bởi Mongoose.

Tôi đã sử dụng:

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

Và xác định hàm:

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

Điều 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 theo định dạng MMMM, định dạng YYYY và tôi không thể tìm ra cách lấy góc để sắp xếp chúng chính xác trừ khi tôi sử dụng phương pháp tạo đối tượng ngày. Làm việc như người ở.
Zargoon 10/03/2015

Đây là phương pháp đúng .. chúng ta 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

17

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

Trên JSFiddle: http://jsfiddle.net/agjqN/


7

Sắp xếp giảm dần theo ngày

Nó sẽ giúp lọc các bản ghi với ngày theo thứ tự giảm dần.

$scope.logData = [
            { event: 'Payment', created_at: '04/05/17 6:47 PM PST' },
            { event: 'Payment', created_at: '04/06/17 12:47 AM PST' },
            { event: 'Payment', created_at: '04/05/17 1:50 PM PST' }
        ]; 

<div ng-repeat="logs in logData | orderBy: '-created_at'" >
      {{logs.event}}
 </div>

2

Trong trường hợp của tôi, orderBy được xác định bởi một hộp chọn. Tôi thích phản hồi của Ludwig vì bạn có thể đặt hướng sắp xếp trong các tùy chọn chọn như sau:

        $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 hàm orderBy tùy chỉnh và chọn một tham số để đặt hàng từ <select> như trong ví dụ của bạn không?
cre8value

0

xem các mẫu của w3schools: https://www.w3schools.com/angular/angular_filters.asp https://www.w3schools.com/angular/tryit.asp?filename=try_ng_filtftimeorderby_click

sau đó thêm cờ "đảo ngược":

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>

<p>Click the table headers to change the sorting order:</p>

<div ng-app="myApp" ng-controller="namesCtrl">

<table border="1" width="100%">
<tr>
<th ng-click="orderByMe('name')">Name</th>
<th ng-click="orderByMe('country')">Country</th>
</tr>
<tr ng-repeat="x in names | orderBy:myOrderBy:reverse">
<td>{{x.name}}</td>
<td>{{x.country}}</td>
</tr>
</table>

</div>

<script>
angular.module('myApp', []).controller('namesCtrl', function($scope) {
    $scope.names = [
        {name:'Jani',country:'Norway'},
        {name:'Carl',country:'Sweden'},
        {name:'Margareth',country:'England'},
        {name:'Hege',country:'Norway'},
        {name:'Joe',country:'Denmark'},
        {name:'Gustav',country:'Sweden'},
        {name:'Birgit',country:'Denmark'},
        {name:'Mary',country:'England'},
        {name:'Kai',country:'Norway'}
        ];

    $scope.reverse=false;
    $scope.orderByMe = function(x) {

        if($scope.myOrderBy == x) {
            $scope.reverse=!$scope.reverse;
        }
        $scope.myOrderBy = x;
    }
});
</script>

</body>
</html>

0

Lời khuyên sử dụng thời điểm () của tôi rất dễ quản lý ngày nếu chúng là các giá trị chuỗi

//controller
$scope.sortBooks = function (reader) {
            var date = moment(reader.endDate, 'DD-MM-YYYY');
            return date;
        };

//template

ng-repeat="reader in book.reader | orderBy : sortBooks : true"

0

var myApp = angular.module('myApp', []);

myApp.filter("toArray", function () {
    return function (obj) {
        var result = [];
        angular.forEach(obj, function (val, key) {
            result.push(val);
        });
        return result;
    };
});


myApp.controller("mainCtrl", function ($scope) {

  $scope.logData = [
              { event: 'Payment', created_at: '10/10/2019 6:47 PM PST' },
              { event: 'Payment', created_at: '20/10/2019 12:47 AM PST' },
              { event: 'Payment', created_at: '30/10/2019 1:50 PM PST' }
          ]; 
        
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>

<div ng-app="myApp" ng-controller="mainCtrl">

  <h4>Descending</h4>
  <ul>
    <li ng-repeat="logs in logData | toArray | orderBy:'created_at':true" >
          {{logs.event}} - Date : {{logs.created_at}}
    </li>
  </ul>
  
  <br>
  
  
  <h4>Ascending</h4>
  <ul>
    <li ng-repeat="logs in logData | toArray | orderBy:'created_at':false" >
          {{logs.event}} - Date : {{logs.created_at}}
    </li>
  </ul>
  
</div>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.