Средневзвешенное значение по порядку в углах

0

Я пытаюсь сортировать таблицу по средневзвешенному значению двух столбцов. Веса для столбцов хранятся в области контроллера. Когда я пытаюсь ссылаться на эти веса в моем заказе, сортировка выражений выполняется неправильно.

 <tr ng-repeat = "x in fruitdata | orderBy:'cost.apples*apples + cost.oranges * oranges'">

Скриншот того, что я хочу: https://jsfiddle.net/t3op50p9/2/

Если я жестко кодирую вес, вместо этого все работает так, как должно

 <tr ng-repeat = "x in fruitdata | orderBy:'1.89*apples + 1.49 * oranges'">

Скрипт с жестко закодированными весами (не то, что я хочу): https://jsfiddle.net/t3op50p9/3/

2 ответа

2
Лучший ответ

Вы можете определить функцию в своей области, которая будет использоваться для расчета веса для заказа

$scope.orderFn = function (fruit) {
    return fruit.apples * $scope.cost.apples + fruit.oranges * $scope.cost.oranges;
}

ng-repeat="x in fruitdata | orderBy: orderFn:true" (примечание: true на конце меняет порядок, создаваемый функцией упорядочения, делающий наибольший вес сверху).

https://jsfiddle.net/TheSharpieOne/t3op50p9/6/

  • 0
    выглядит круто с пользовательским фильтром .. но моя модификация в OP вопрос имеет смысл?
  • 0
    Да, приятно иметь его в шаблоне, но вы теряете возможность делать простые модульные тесты с этой функциональностью.
Показать ещё 3 комментария
1

Вы должны использовать cost.apples & cost.oranges не должны находиться внутри ' одиночных кавычек", поскольку они не являются частью повторного массива ng-repeat, поэтому они будут привязаны как конкатенация строк.

наценка

<tr ng-repeat="x in fruitdata | orderBy:cost.apples+'*apples + '+ cost.oranges+' * oranges'">
    <td> {{x.oranges}} </td>
    <td> {{x.apples}} </td>
    <td> {{x.apples * cost.apples + x.oranges * cost.oranges}} </td>
</tr>

Рабочий скрипт

Ещё вопросы

Сообщество Overcoder
Наверх
Меню