【发布时间】:2017-02-21 15:03:42
【问题描述】:
我有以下数组:
$scope.products = [
{
nom : "Pa de fajol",
img : "dill1.jpg",
descripcio: [
"Pa de motlle"
],
preu:4.90,
tipus: "Pa"
},
{
nom : "Pagès semi integral de blat/espelta",
img : "dill2.jpg",
descripcio: [
"Pa de pagès",
"680g / 400g"
],
tipus: "Pa",
variacions : [
{
nom: "Gran",
preu: "3.70",
grams: "680g",
basket: 0
},
{
nom: "Petit",
preu: "2.30",
grams: "400g",
basket: 1
}
]
}
在前端,我用ng-repeat 显示它,并且根据产品是否有价格(preu),我为单个产品显示一个数量输入,或每个变体一个输入。
看起来像这样:
<div ng-repeat="pa in products">
<div ng-if="!pa.preu" ng-repeat="vari in pa.variacions">
<input type="number" ng-model="pa.variacions.basket" ng-init="pa.variacions.basket=0">
</div>
<input ng-if="pa.preu" type="number" ng-model="pa.basket" name="basket" ng-init="pa.basket=0">
</div>
<a ng-click="insert()">Add to cart</a>
当我触发insert() 时,我有一个函数可以添加产品并计算总价,但到目前为止它只适用于有价格的产品,不适用于变体。
函数如下所示:
$scope.insert = function() {
$scope.singleorder = [];
for(var i = 0; i < $scope.products.length; i++)
if($scope.products[i].basket) { // if input has been setted
$scope.singleorder.push({
'product': $scope.products[i].nom,
'number': $scope.products[i].basket,
'preu': ($scope.products[i].preu * $scope.products[i].basket)
});
}
console.log($scope.singleorder);
}
我将如何继续在 $scope.singleorder 数组中包含来自嵌套变量数组的计算?
有什么建议吗?
编辑
请参阅Plunkr 重现该问题
解决方案
在一些 cmets 的帮助下,我设法修复了它!
查看 Plunkr 了解最终版本。 这是最终的功能:
$scope.insert = function() {
$scope.singleorder = [];
for(var i = 0; i < $scope.products.length; i++)
if($scope.products[i].basket) { // if input has been setted
$scope.singleorder.push({
'product': $scope.products[i].nom,
'number': $scope.products[i].basket,
'preu': ($scope.products[i].preu * $scope.products[i].basket)
});
}
else if($scope.products[i].variacions) { // if input has been setted
angular.forEach($scope.products[i].variacions, function(variacions) {
if(variacions.basket) {
$scope.variname = $scope.products[i].nom + ' (' + variacions.nom + ')'
$scope.singleorder.push({
'product': $scope.variname,
'number': variacions.basket,
'preu': (variacions.preu * variacions.basket)
});
}
});
}
console.log($scope.singleorder);
【问题讨论】:
-
你能在 plnkr/jsfiddle/jsbin 中重现这个吗?
-
你的插入函数在哪里处理变化?
-
@CallumLinington 查看编辑
-
@putonspectacles 就是这样,我不知道如何访问它们,进行计算并将它们包含在最终数组中(单序)
-
嗯,你知道如何使用点语法,那么
$scope.products[i].variacions中的内容是什么?应该是数组。所以就像你对$scope.products所做的那样循环。
标签: javascript angularjs arrays