javascript - 如何通过对象的数字键反转 Angular ngRepeat 的顺序

标签 javascript angularjs

使用 Angular JS 的 ngRepeat 指令,我怎样才能使生成的迭代以相反的顺序进行?我正在使用一个对象,其中的键是数字,我想按这些数字降序排序。

我知道你不能像这样通过键对对象进行真正的排序(不保留对数组的引用),但这在 Angular 中完全可行吗?

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>

<body>
  <script>
    var app = angular.module('myApp', []);
    app.filter('orderObjectBy', function() {
      return function(items, field, reverse) {
        var filtered = [];
        angular.forEach(items, function(item) {
          filtered.push(item);
        });
        filtered.sort(function(a, b) {
          return (a[field] > b[field] ? 1 : -1);
        });
        if (reverse) filtered.reverse();
        return filtered;
      };
    });
    app.controller('myController', ['$scope',
      function($scope) {
        $scope.data = {
          2013: 'oldest 4',
          2014: 'older 3',
          2015: 'new 2',
          2016: 'newest 1'
        };
      }
    ]);
  </script>
  <div id="myApp" ng-app='myApp' ng-controller="myController">
    <div ng-repeat="(date,text) in data">{{text}}</div>
    <hr/>
    <div ng-repeat="(date,text) in data | orderBy:date:reverse">{{text}}</div>
    <hr/>
    <div ng-repeat="(date,text) in data | orderBy:'-date'">{{text}}</div>
    <hr/>
    <div><b>Correct Answer!:</b></div><hr/>
    <div ng-repeat="(date,text) in data | orderObjectBy:date:true">{{text}}</div>
  </div>

</body>

例如,我希望从最新到最旧排序(与此代码中的操作相反)

最佳答案

ng-repeat 不适用于对象,因为您需要创建自定义过滤器。

 <div ng-repeat="(date,text) in data | orderObjectBy:date:true">{{text}}</div>

app.filter('orderObjectBy', function() {
  return function(items, field, reverse) {
    var filtered = [];
    angular.forEach(items, function(item) {
      filtered.push(item);
    });
    filtered.sort(function (a, b) {
      return (a[field] > b[field] ? 1 : -1);
    });
    if(reverse) filtered.reverse();
    return filtered;
  };
});

Plunker

希望对您有所帮助:)

关于javascript - 如何通过对象的数字键反转 Angular ngRepeat 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29484650/

相关文章:

angularjs 指令 : $rootScope:infdig error

javascript - 类型错误 : Cannot read property 'redirect_uris' of undefined

javascript - 在脚本中添加 fadeTo 方法

javascript - 将 javascript 对象成员投影到数组中

javascript - D3 动画(过渡)不适用于 Angular 应用程序

angularjs - Typeahead TypeError : b. toLowerCase() 不是函数

javascript - 基于一个外部来源和之前做出的选择的下拉选项?

javascript - Indesign 服务器脚本 Textarea.Contents

javascript - 如何使用 jquery 在 Angular 中选择具有 ng-class attr 的元素

javascript - 使用 AngularJS 实现共享元素转换