2016-02-02 48 views
0

我想弄清楚如何观看数组并更新对象,就像这样。AngularJS - 观看数组和更新对象

var vm = this; //controller 
vm.order = { 
    totalValue: 25, 
    products: [{id:0, val: 10, qtd: 1}, {id:1, val: 15, qtd: 1}] 
}; 

如果我将新产品推入此订单对象,如何更新totalValue只是看集合? (totalValue = All Val * All Qtd)

这是必要的,因为“qtd”字段绑定到输入字段,所以我可以随时更改所有“产品”的值。

UPDATE

$scope.$watchCollection(
      function() { return self.order.products; }, 
      function(products) { 
       self.order.totalValue = products.reduce(function (p, n) { 
        console.log(n.qtd); 
        console.log(n.val); 
        return p + n.qtd * n.val; 
       }, 0); 
      }); 

的代码工作,但只有当我推一个新的 “产品” 到订单。 我必须注意每一个order.products.product.qtd每一次改变order.totalValue用户更改产品

回答

1

的QTD试试这个方法:

$scope.$watch('order.products', function (products) { 
    scope.order.totalValue = products.reduce(function (p, n) { 
     return p + n.qtd * n.val; 
    }, 0); 
}, true); 

这将深深看阵列检测数组项中的qtd和val更改。

+0

如果我有“$ scope.orders”而不是“var vm = this; vm.orders”,该怎么办? 我已经更新了这个问题 –

+1

然后,你必须相应地调整你的功能,如[这里描述](http://stackoverflow.com/questions/30874412/angular-controller-as-syntax-no-method-watchcollection )。 – raina77ow

+0

@Lucas Freitas更新了答案 – karaxuna