我在表格中使用ng-repeat
来显示商品及其价格列表。
itemPrice(item)
。$scope.orderType
计算价格。orderType
绑定到HTML中的select
。订单类型更改时强制所有价格更新的最佳方法是什么?
<select ng-model="orderType" ng-options="name for name in orderTypes"></select>
<!-- ... -->
<tr ng-repeat="item in items">
<td>{{ item.name }}</td>
<td><input type="checkbox" ng-model="item.is_used"></td>
<td><input type="number" ng-model="item.quantity" min="0" max="100"></td>
<td>{{ itemPrice(item) | currency:"$" }}</td>
<td>{{ itemPrice(item) * item.quantity | currency:"$" }}</td>
</tr>
.controller('OrderCtrl', ['$scope', '$http', function($scope, $http) {
// Set up order types
$scope.orderTypes = ['Buy Back', 'Sale'];
$scope.orderType = $scope.orderTypes[1];
// ...
// Get the price of an item
$scope.itemPrice = function(item) {
if ($scope.orderType === 0) {
return item.price_buy_back;
} else if (item.is_used) {
return item.price_used;
} else {
return item.price_new;
}
}
// ...
}]);
答案 0 :(得分:3)
我工作,而且我没有时间做一名侦探来验证这一点:
我建议不要使用函数(&#34; itemPrice&#34;)。事先计算好这个值,并将值放在项目结构中的变量中。
当其他类型更改时(使用ng-change或$ scope。$ watch ..),然后重新计算并更新项目结构中的变量。
类似的东西:
.controller('OrderCtrl', ['$scope', '$http', function($scope, $http) {
// Set up order types
$scope.orderTypes = ['Buy Back', 'Sale'];
$scope.orderType = $scope.orderTypes[1];
var itemPrice = function(item) {
if ($scope.orderType === 0) {
return item.price_buy_back;
} else if (item.is_used) {
return item.price_used;
} else {
return item.price_new;
}
}
var setItemPrices = function(){
for(var i = 0; i < $scope.items.length; i++)
{
$scope.items[i].itemPrice = itemPrice($scope.items[i]);
}
}
$scope.$watch("orderType", function(newVal, oldVal){
//update itemPrices
.... setItemPrices();
});
// ...
}]);
答案 1 :(得分:0)
itemPrice
函数的第一行将$scope.orderType
与整数进行比较。但是$scope.orderType
在函数($scope.orderType = $scope.orderTypes[0]
)的前面设置为 string 。
现在比较已修复,ng-repeat
按预期更新,每当itemPrice
更改时都会调用$scope.orderType
。