我有以下代码重复并显示购物车的项目。
<div ng-repeat="retailer in cart.getOrderedByRetailer()" >
<ion-item>
{{retailer.retailer_name}}
</ion-item>
<ion-item class="item-icon-right canasta-item canasta-height" ng-repeat="cartitem in retailer.order_items">
{{cartitem.stockitem.product.name| limitTo: 20}}
</ion-item>
</div>
通过以下方法,我尝试在购物车中订购商品,但我不能这样做
getOrderedByRetailer:function(){
var ordered_order_items = this.content.items.reduce(function (map, obj) {
if (map[obj.stockitem.retailer] === undefined) {
//console.log(map[obj.stockitem.retailer]);
map[obj.stockitem.retailer] = {
'retailer_name': obj.stockitem.retailer,
'order_items': []
}
}
map[obj.stockitem.retailer].order_items.push(obj);
//console.info(map);
return map;
}, {});
return ordered_order_items
}
当我运行上面的代码时,我得到Error:10 $ digest()迭代。中止!我的控制台出错了。
有谁能帮我理解这里有什么问题?非常感谢你的帮助。
答案 0 :(得分:2)
问题是每当getOrderedByRetailer()
被执行时,angularjs
将其结果视为新结果,即使看起来像之前的结果。当函数返回数组时,它是common problem。因此,如果函数的结果仅依赖于this.content.items
,则可以通过以下方式重构代码:
<div ng-repeat="retailer in cart.getOrderedByRetailerResult" >
....
</div>
<强>使用Javascript:强>
this.content.items = [];
//each time this.content.items are changed call getOrderedByRetailer():
this.cart.getOrderedByRetailerResult = getOrderedByRetailer();