在ng-repeat中使用orderBy的方法

时间:2016-05-04 08:33:55

标签: javascript angularjs angular-filters

如何使用orderBy方法?

我想用ng-repeat从一个方法而不是属性中对我的数组进行排序:

的index.html

<tbody>
    <tr ng-repeat="product in results.data | orderBy: product.getAllCounter()">
        <!-- Product name -->
        <td ng-bind="(product.product_offer[0].app_name === null) ? product.app.store_id : product.product_offer[0].app_name"></td>

        <!-- Counter -->
        <td class="text-right" ng-bind="product.getAllCounter()"></td>

        <!-- Action -->
        <td class="text-center">
            <div class="btn-group">
                <a ng-href="/#/product/{{ product.id }}" type="button" class="btn btn-default btn-sm">
                    See
                </a>
            </div>
        </td>
    </tr>
</tbody>

Product.prototype.getAllCounter

// Return result all counter in promo
Product.prototype.getAllCounter = function () {
    var sum = 0;

    angular.forEach(this.product_promo_linker, function (product_promo_linker) {
        sum += product_promo_linker.promo.count;
    });

    return sum;
};

我试过

  

orderBy:product.getAllCounter()

  

orderBy:product.getAllCounter

方法product.getAllCounter返回整数

  

解决

我用过:

<tr ng-repeat="campaign in results.data | orderBy: getAllCounter:true">

在我的controller.js中:

$scope.getCounter = function(product) {
    return campaign.getAllCounter();
};

2 个答案:

答案 0 :(得分:1)

如果您想使用自定义排序功能,则需要提供一个:

ng-repeat="product in results.data | orderBy: product.getAllCounter"

注意:函数名后面没有():你想使用函数引用,而不是函数调用的结果。

答案 1 :(得分:0)

只需传递参考

&#13;
&#13;
angular.module('app', [])
  .controller('ctrl', function($scope) {
    $scope.products = [{
      name: 'foo',
      age: 2
    }, {
      name: 'bar',
      age: 1
    }, {
      name: 'baz',
      age: 3
    }]
    
    $scope.orderByAge = function(element) {
      return element.age
    }
  })
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>


<ul ng-app='app' ng-controller='ctrl'>
  <li ng-repeat="product in products | orderBy: orderByAge">
    {{ product.name }} - {{ product.age }}
  </li>
</ul>
&#13;
&#13;
&#13;