angularJS错误的变量改变

时间:2016-07-14 11:06:34

标签: javascript angularjs

好吧,这似乎是一个奇怪的

我的目录中使用来自名为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 &nbsp;</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">&times;</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;
    }

}

如果您需要查看其他内容,请询问并提供。感谢

1 个答案:

答案 0 :(得分:2)

不,传递的对象是对列表中对象的引用。不是它的副本。

您可以使用angular.copy()深度复制购物车的对象并进行修改。