2015-10-27 3 views
0

У меня есть выражениеAngularJS OrderBy выражение с вычитанием

{{ 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; 
    }; 
+0

'orderBy' используется с' ng-repeat' - как вы его используете? –

+2

создайте собственный фильтр или добавьте свойство для каждого элемента в контроллере или услуге – charlietfl

+0

, вы также можете фильтровать по функциям. @ Explosion Pills, orderBy - обычный фильтр, не более того. –

ответ

2

Прежде всего, ваш пример не имеет особого смысла: OrderBy относится к массиву, чтобы упорядочить элементы этого массива. Но product.SelectedProduct.ProductName, вероятно, не является массивом.

Второе: the documentation говорит:

функция выражения () StringArray. < (функция () | string)> =

Предикат, используемый компаратором для определения порядка элементов.

Может быть один из:

функции: функция Getter. Результат этой функции будет отсортирован с использованием оператора <, ===,>. [...]

Таким образом, все, что вам нужно, это функция в области, которая возвращает элемент для сравнения для данного элемента массива:

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

и в представлении:

{{ productArray | orderBy:reducedPrice }} 

Другим вариантом было бы предвычисления reducedPrice и хранить его в качестве атрибута или продукта, а затем просто использовать

{{ productArray | orderBy:'reducedPrice' }} 
+0

JB Я редактировал мой код выше, чтобы показать вам, что я сделал. Это не работает. Я что-то упускаю? Спасибо за вашу помощь. – hollyquinn

+0

Да, вам что-то не хватает. orderBy используется для сортировки элементов ** массива ** (продуктов в этом случае). Но вы применяете его к названию одного продукта. Это бессмысленно. Это самое первое предложение моего ответа. –

Смежные вопросы