1

我目前有:

ng-repeat="pesron in people | orderBy:variable"

随着事件的发生,变量会发生变化,因此人员的顺序也会发生变化。
问题:如何以数组的形式访问控制器中的人员,并按适当顺序排列?

我试过了:

angular.forEach($rootScope.people, function(value,index) {  
    console.log(value);  
});

但是,这只会按照变量添加到范围的顺序给出变量。

4

1 回答 1

1

注入$filter您的控制器,然后执行以下操作

var orderedPeople = $filter('orderBy')($scope.people, 'variable')

如果您希望它在更改时variable更改,那么您需要将作业放在$scope.$watch.

但是,更大的图景是您可能不应该以这种方式构建您的应用程序。也就是说,你是

  1. 在每个摘要周期过滤您的数组,即使variable只是偶尔更改一次。
  2. 在您的视图中过滤它,然后在控制器中重复该工作。

以下会更有效:

在您的控制器中:

people = []; // initialize me
$scope.$watch(function() { return people; }, sortList, true); 
// we're resorting whenever any property on $scope.people changes.
// This isn't the best solution if people is a huge and complex object
function sortList() {
  $scope.orderedPeople = $filter('orderBy')(people, 'variable');
}

// somewhere else
doSomethingWith($scope.orderedPeople);

在您看来:

<div ng-repeat="person in orderedPeople"></div>

请参阅https://docs.angularjs.org/api/ng/filter/orderByhttps://docs.angularjs.org/api/ng/filter/filter

于 2014-12-28T17:57:52.400 回答