AngularJS orderBy表达式有减法

时间:2015-10-27 18:43:01

标签: angularjs

我有一个表达

{{ product.SelectedProduct.BasePrice - product.SelectedProduct.Discount | currency  }}

我需要能够按照baseprice的价格订购我的产品 - 折扣。有没有办法做到这一点?所以我想要像

这样的东西
{{product.SelectedProduct.ProductName | 
orderBy : product.SelectedProduct.BasePrice - product.SelectedProduct.Discount }}

新代码:

<div class="row-fluid">
            <span class="mktpl_productnm" ng-show="product.SelectedProduct.ProductName">{{product.SelectedProduct.ProductName || 'product not available' | orderBy: price }}</span>
            <span ng-hide="product.SelectedProduct.ProductName" class="field-validation-error">Product not available</span>
            <span ng-show="product.SelectedProduct.remaining < product.SelectedProduct.prodterm.minQuantity" class="field-validation-error">
                (Out of stock)
            </span>
        </div>

 vm.price = function (product) {
        debugger;
        return product.SelectedProduct.BasePrice - product.SelectedProduct.Discount;
    };

1 个答案:

答案 0 :(得分:2)

首先,您的示例没有多大意义:orderBy适用于数组,以排序此数组的元素。但product.SelectedProduct.ProductName可能不是数组。

第二:the documentation说:

  

表达式函数()stringArray。&lt;(function()| string)&gt; =

     

比较器用来确定元素顺序的谓词。

     

可以是以下之一:

     

功能:Getter功能。此函数的结果将使用&lt;,===,&gt;进行排序。运营商。   [...]

因此,您需要的只是范围中的一个函数,它返回要对数组的给定元素进行比较的元素:

$scope.reducedPrice = function(product) {
    return product.SelectedProduct.BasePrice - product.SelectedProduct.Discount;
};

并在视图中:

{{ productArray | orderBy:reducedPrice }}

另一种选择是预先计算reducedPrice并将其存储为属性或产品,然后只需使用

{{ productArray | orderBy:'reducedPrice' }}