我试图在价格或数量变化时计算新的总数。我不明白如何获得对已更改的特定对象的引用。
$scope.parts = [{description: null, price: 0, qty: 0, subtotal: null}]
$scope.partsTotal = 0
$scope.$watch('parts', =>
$scope.partsTotal += $scope.parts.price * $scope.parts.qty
$scope.parts.subtotal = $scope.parts.price * $scope.parts.qty
, true)
答案 0 :(得分:0)
在数组文字中有一个对象文字。
您必须访问示例中的“小计”属性,如下所示:
$scope.parts[0].subtotal
$ watch(es)获取新值以及触发时传入的旧值。我会尝试用你的例子重现,但我不能用咖啡来写它。您可以从进入的参数中获取值,或者您可以像在那里一样直接访问对象(考虑到您使用深度监视,这可能会更容易)。
答案 1 :(得分:0)
在数组中的每个对象上创建一个新监视,然后使用watch,第一个参数是返回对象的函数(我使用underscorejs迭代数组):
更新:你可能会使用_.each()丢失引用,所以如果这不起作用,请尝试for循环......
for(var i=0; i<$scope.parts.length; i++) { var part = $scope.parts[i]; ... }
_.each($scope.parts, function(part) {
$scope.$watch(
function() { return part; },
function(newVal, oldVal) {
if(newVal.price !== oldVal.price || newVal.qty !== oldVal.qty) {
//run the update
}
}
);
});