2015-04-01 34 views
0

如何通过getTotal()订购,然后按数量降序排列?如何通过示波器功能然后按字段排序

<!DOCTYPE html> 
<html ng-app="shop"> 
    <head> 
     <script 
     src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> 
    </head> 
    <body> 
     <div ng-controller='productCtrl'> 
     <ul> 
      <li ng-repeat="x in products| orderBy:'price'"> 
       {{x.quantity}} {{x.Name}} 
       <strong>{{ (x.quantity*x.price)|currency}}</strong> 
      </li> 
     </ul> 
     <p>Total = {{ (getTotal()) | currency }}</p> 
     </div> 
     <script> 
     var app=angular.module("shop",[]) 
     .controller('productCtrl',function($scope){ 
       $scope.products=[{quantity:4,price:42.3,Name:"HDD Sata"}, 
        {quantity:14,price:2.83,Name:"USB Key"}, 
        {quantity:5,price:11.03,Name:"Azerty Keyboard"}, 
        {quantity:1,price:4.3,Name:"Mouse"}]; 
       $scope.getTotal=function(){ 
        var sum=0; 
        for(var i=0;i<$scope.products.length;i++){ 
      sum+=($scope.products[i].price*$scope.products[i].quantity); 
     } 
        return sum; 
       } 
     }); 
     </script> 
    </body> 
</html> 

回答

1

如果需要通过getTotal()订购则该函数将返回只有一个值(所有的项值的),所以没有有效使用该功能来订购的。我想你需要通过项目总数,而不是所有的项目共订购:

试试这个,

例如:考虑以下数据

$scope.products = [{ 
    quantity: 4, 
    price: 1, 
    Name: "HDD Sata" 
}, { 
    quantity: 2, 
    price: 2, 
    Name: "USB Key" 
}, { 
    quantity: 5, 
    price: 11.03, 
    Name: "Azerty Keyboard" 
}, { 
    quantity: 1, 
    price: 4.3, 
    Name: "Mouse" 
}]; 

我认为你需要HDD Sata顶部和Azerty Keyboard在底部,因为HDD Sata的总价格是$4.00同时USB Key$4.00HDD Sata4 quantityUSB Key2 quantity并且您需要数量为DESCENDING所以HDD SataUSB Key之上。 Azerty Keyboard的小计总计为$55.15,这是项目及其底部的最高总额。

在HTML

<li ng-repeat="x in products| orderBy:[getTotalForItem, '-quantity'] "> 
在控制器

$scope.getTotalForItem = function(item) { 
    return item.price * item.quantity; 
} 

这里是demo plunker

+0

这正是我想要的!非常感谢@ K.Toress! – Bellash 2015-04-01 12:35:55

+1

很高兴帮助你:) – 2015-04-01 12:44:50

相关问题