Я пытаюсь сортировать таблицу по средневзвешенному значению двух столбцов. Веса для столбцов хранятся в области контроллера. Когда я пытаюсь ссылаться на эти веса в моем заказе, сортировка выражений выполняется неправильно.
<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/
Вы можете определить функцию в своей области, которая будет использоваться для расчета веса для заказа
$scope.orderFn = function (fruit) {
return fruit.apples * $scope.cost.apples + fruit.oranges * $scope.cost.oranges;
}
ng-repeat="x in fruitdata | orderBy: orderFn:true"
(примечание: true
на конце меняет порядок, создаваемый функцией упорядочения, делающий наибольший вес сверху).
Вы должны использовать 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>