我是angularjs的新手。我在某处找到了下面的例子,它的工作正常。但是,我不明白定制指令控制器中的数据如何与工厂数据同步。下面是代码:定制指令控制器数据与工厂数据同步
angular.module("cart",[]).factory("cart", function(){
var cartData = [];
return{
addProduct:function(id, name, price){
cartData.push({count:1, id:id, price:price, name:name})
},
getProduct: function(){
return cartData;
}
};
}).directive("cartSummary", function(cart){
return{
restrict: "E",
template:"cartSummary.html",
controller: function($scope){
var cartData = cart.getProduct();
$scope.totalPrice = function(){
var total = 0;
for(var i=0; i<=cartData.length; i++){
total+= (cartData[i].price * cartData[i] * count);
}
}
}
}
});
,并在另一模块,我有以下的代码来更新cartData:
angular.module("store", ["cart"]).controller("storeCtrl", function($scope, cart){
/*some logic here*/
$scope.addToCart = function(){
cart.addProduct(product.id, product.name, product.price);
}
});
这里是视图:
<html ng-app="store">
<body ng-controller="storeCtrl">
<!--some html-->
<cart-summary/>
<!--some html-->
<button ng-click="addToCart(item)">Add To Cart</button>
</body>
</html>
指令的模板:
<div class="navbar-text">
{{totalPrice()}}
</div>
我了解每次用户点击“添加到购物车”按钮时,工厂中的cartData都会得到更新,但我没有明白工厂中cartData的事实总是与定制指导控制器中的数据同步。每次函数$ scope.totalprice()如何被调用?
有人可以向我解释这个吗?非常感谢!
OMG,多数民众赞成在正确的!非常感谢! – 2014-08-29 01:24:38
现在我很困惑模板视图中的totalPrice()每次如何被调用。你能解释一下吗?非常感谢你 – 2014-08-29 16:48:29
实际上,它确实会产生内存泄漏,因为它的摘要循环中的角度比较它的变量值和它们在此之前的摘要循环中的先前值。 得到这个的简单方法是角度不知道函数是否改变了结果,所以在每个摘要循环中角将会一次又一次地执行它。在插值{{}}内调用函数被认为是不好的做法,特别是重逻辑函数。相反,预先计算结果并将其绑定到范围的属性 – HeberLZ 2014-08-30 06:20:44