如何引用已使用angular $ watch更改的数组中的特定对象

时间:2014-09-01 18:48:31

标签: javascript angularjs coffeescript angularjs-scope

我试图在价格或数量变化时计算新的总数。我不明白如何获得对已更改的特定对象的引用。

$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)

2 个答案:

答案 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

    }
  }
);

});