我的目录中使用来自名为ng-repeat
的数组中的items
来填充项目,当用户选择项目时,会出现一个对话框,询问用户一些额外的信息(刚才,只有一个新用户名),当他们点击提交时,会调用addToCart(item)
函数并传递所选项目。
作为该函数的一部分,它将Question[]
对象中的item
变量更改为Question = "question:answer"
这里很奇怪,这个功能的第一件事就是将传递的项目打印到日志中。当它发生时,它表明该功能已经运行。下一行打印出items
数组,该数组显示已传递的项目更改已应用于原始项目。
据我所知,传递的变量被视为原始值的副本否? 0.o
任何人都可以看到我做错了吗?......或者对这些问题的解决方案有任何想法?
这里是代码:
HTML:
<div class="panel-footer" ng-show="cat.itemHasQuestions(item)">
<a href="" class="btn btn-primary" data-toggle="modal" data-target="#cartDataU" ng-click="cat.selected = item">Add to order</a>
<input class="pull-right" type="number" value="1" min="0" ng-model="item.qty"/>
<label class="pull-right">QTY </label>
</div>
<div id="cartDataU" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Please provide more details.</h4>
</div>
<div class="modal-body">
Content:
<form>
<input type="text" ng-repeat="info in cat.selected.Question track by $index" placeholder="{{info[0] + '...'}}" class="form-control" ng-model="cat.selected.answer[$index]">
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default btn-block" data-dismiss="modal" ng-click="cat.addToCart(cat.selected, 'user')">submit</button>
</div>
</div>
</div>
</div>
和addToCart函数:
this.addToCart = function(item, cat){
console.log("====================");
console.log(item);
console.log(catCon.items);
console.log("====================");
if(item.qty == undefined || item.qty <=0){
//console.log("qty undefined")
item.qty = 1
//console.log("updated QTY");
//console.log(item.qty);
}
/* console.log(item); */
if(catCon.itemHasQuestions(item, false, "Code: addtocart") == true){
/* console.log("================");
console.log(item.Question);
console.log("================"); */
qa = "";
for(i = 0; i<item.Question.length; i++){
if(i < item.Question.length-1){
qa += item.Question[i][0] + ":" + item.answer[i] + ",";
}else{
qa += item.Question[i][0] + ":" + item.answer[i];
}
}
item.Question = qa;
}else{
// console.log("Question is a string in an array, making string in string xD")
item.Question = "";
}
if(catCon.itemIsInCart(item.Name)){
catCon.cart[catCon.findItemInCart(item.Name)].qty++;
catCon.cart[catCon.findItemInCart(item.Name)].Question += "," + qa;
}else{
catCon.cart[catCon.cart.length] = item;
}
}
如果您需要查看其他内容,请询问并提供。感谢
答案 0 :(得分:2)
不,传递的对象是对列表中对象的引用。不是它的副本。
您可以使用angular.copy()深度复制购物车的对象并进行修改。