我想在嵌套重复中使用子总数,将其视为商店购物车,但购物车分为产品(鞋子,夹克)或其他嵌套结构。
所以我认为有(至少)3种不同的方法来实现相同的结果。有什么区别,特别是性能,我应该使用哪些(对于大量数据)?
值得注意的是,这更多是关于数据呈现(如管理员视图),而不仅仅是关于如何累计购物车的问题(已经涵盖了很多!)。更多关于如何从数据的角度处理它,当你有很多购物车和许多其他计算,如平均成本,累积成本..周二(或任何!)人喜欢的颜色。
<table>
<tr ng-repeat="product in cart.products">
<td>{{product.name}}</td>
<table>
<tr ng-repeat="item in product.items">
<td>{{item.name}}</td>
<td>{{item.cost}}</td>
</tr>
</table>
<td>{{ getProductTotal(product) }}</td>
</tr>
<tr>{{ getCartTotal() }}</tr>
</table>
$scope.cart = {
person: "Nicky poppy pie",
products: {},
total: function () {
var total = 0;
foreach(product...)
return total;
}
};
或
$scope.cart = {};
$scope.cart.total = getCartTotal()
function getCartTotal() {
//insert crazy calculations
}
$scope.$watch('cart', function() {
var cartTotal = 0;
$scope.cartItems.forEach(function(product) {
cartTotal += product.cost();
});
$scope.cartTotal = cartTotal;
}, true);
答案 0 :(得分:0)
我认为你是以错误的方式接近它。
您应该将总数作为购物车对象的属性。在您的视图中,您可以正常绑定它。 您不希望在每个$ scope上进行所有“疯狂计算”。$ digest但只在以下时间执行一次:
在每个方法结束时,您调用updateTotalCart()方法并在对象上设置属性。
答案 1 :(得分:0)
来自 angularjs表达式的官方文档:
如果您想运行更复杂的JavaScript代码,您应该将其设置为控制器方法并从您的视图中调用该方法。 angularjs doc link
我认为这基本上意味着如果你认为你的计算足够简单,你可以使用角度表达式。
但如果计算复杂,最好使用控制器方法。