对象的AngularJs ng-repeat orderBy数组

时间:2015-09-07 08:48:10

标签: javascript angularjs filter ng-repeat

我想按照他的特定对象" id"来排序ng-repeat个对象的结果。此订单位于数组中,因此我制作了此自定义过滤器ng-repeat="line in dataObject|objectIdFilter:orderByArray"

.filter('objectIdFilter', [function() {
    return function(inputObjet, orderArray) {
        var result = [];
        angular.forEach(orderArray, function(value) {
          result.push(inputObjet[value]);
        });
        console.log(result);
        return result;
    }
}])

这是一个示例基本控制器,其中包含对象和数组中的订单ID:

.controller('MainCtrl', ['$scope', function($scope) {

  $scope.dataObject = {
    1: {username:'user1'},
    10: {username:'user10'},
    20: {username:'user20'},
    500: {username:'user500'}
  };

  $scope.orderByArray = [20,10,1,500];

}])

用他的HTML:

<div ng-app="myApp">
  <div ng-controller="MainCtrl">
      <div ng-repeat="line in dataObject|objectIdFilter:orderByArray">{{line.username}}</div>
  </div>
</div>

Jsfiddle:https://jsfiddle.net/infnadanada/tLrx4uro/

所以...

  • 一切正常,但我不知道是否有其他方式可以像我一样订购ng-repeat而不使用自定义过滤器。

    < / LI>
  • 如果您在浏览器控制台中访问Jsfiddle,您可以看到我的自定义过滤器返回结果的两倍,我不知道原因。

PD:英语不是我的第一语言:D

由于

2 个答案:

答案 0 :(得分:1)

可能有另一种好方法,但您可以在控制器内过滤数据,而无需使用过滤器。通过使用它,您可以防止角度调用过滤器两次。

$scope.dataObject = {
    1: {username:'user1'},
    10: {username:'user10'},
    20: {username:'user20'},
    500: {username:'user500'}
  };
  $scope.orderByArray = [20,10,1,500];
   $scope.result = [];
  angular.forEach($scope.orderByArray, function(value) {
      $scope.result.push($scope.dataObject[value]);
  });
}]);

在模板内

<div ng-app="myApp">
  <div ng-controller="MainCtrl">
      <div ng-repeat="line in result">{{line.username}}</div>
  </div>
</div>

答案 1 :(得分:1)

其他方式:您可以遍历maphttps://jsfiddle.net/sherali/tLrx4uro/2/

$scope.dataObject = {
    1: {username:'user1'},
    10: {username:'user10'},
    20: {username:'user20'},
    500: {username:'user500'}
  };
  $scope.orderByArray = [20,10,1,500];
  $scope.result = $scope.orderByArray.map(function(value){
      return $scope.dataObject[value];
  });