【问题标题】:Get order of variables in scope after dynamic OrderBy在动态 OrderBy 之后获取范围内的变量顺序
【发布时间】:2014-12-28 17:21:57
【问题描述】:

我目前有:

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

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

我试过了:

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

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

【问题讨论】:

    标签: angularjs angularjs-scope angularjs-orderby


    【解决方案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

    【讨论】:

    • 效果很好,谢谢。从长远来看,后一种方法肯定更好。
    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多