如何使用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();
};
答案 0 :(得分:1)
如果您想使用自定义排序功能,则需要提供一个:
ng-repeat="product in results.data | orderBy: product.getAllCounter"
注意:函数名后面没有()
:你想使用函数引用,而不是函数调用的结果。
答案 1 :(得分:0)
只需传递参考
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;