2016-02-02 49 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