排序角度js后比较数组值

时间:2014-10-24 16:55:03

标签: angularjs

这是从点击Return wrong Index after Sorting 延伸出来的问题!

 > <tr ng-repeat="item in items | orderBy:'Store.storeName'">
            <td><input class="toggle" type="checkbox" ng-model="item.Completed"></td>
            <td>{{item.Name}}</td>
            <td>{{item.Quantity}} Stk.</td>
            <td>{{item.Price || 0 | number:2}} €</td>                
            <td>{{item.Quantity*item.Price|| 0 | number:2}} €</td>
            <td>{{item.Store.storeName}}</td> 
            <td><a><img src="img/delete.png" ng-click="removeItem(item)">{{$index}}</a></td>

所以在他的问题中他尝试在排序后删除数组中的项目,“$ index”不会返回正确的索引,因此解决方案建议将“item”本身作为参数传回并使用“indexof” (项目)“功能。

我的问题是如果我想在排序后比较值?
由于$ index没有反映新排序数组中的实际排序索引,因此我无法比较计算排序数组中第一项和第二项之间item.Price的值。

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用自定义$filter,如下所示:

.filter('prevExpression', function($parse){
    return function(prevItemExpression){
        if(!prevItemExpression || !this.$$prevSibling)
            return undefined;        
        return $parse(prevItemExpression)(this.$$prevSibling);
    } 
})

对于像这样的控制器的示例:

.controller('testController', function($scope){
    $scope.items = [
        {id:1, name:'a', price:12.5},
        {id:2, name:'b', price:0.5},
        {id:3, name:'c', price:1.5},
        {id:4, name:'d', price:8},
        {id:5, name:'e', price:100}
    ];

})

你可以这样做:

<table ng-app="testApp" ng-controller="testController">
    <tr>
        <td>Name</td>
        <td>Price</td>
        <td>Prev Item Price</td>        
    </tr>
    <tr ng-repeat="item in items | orderBy:'price'">
        <td>{{item.name}}</td>
        <td>{{item.price}}</td>
        <td>{{'item.price' | prevExpression }}</td>        
    </tr>
</table>

Example