Javascript angularJS变量更改错误

Javascript angularJS变量更改错误,javascript,angularjs,Javascript,Angularjs,好吧,这看起来很奇怪 我有一个目录,里面用一个名为items的数组中的ng repeat填充了项目,当用户选择一个项目时,会出现一个对话框,询问用户一些额外的信息(刚才,只有一个新的用户名),当他们点击提交时,会调用一个addToCart(item)函数并传递所选项目 作为函数的一部分,它将项对象中的Question[]变量更改为如下Question=“Question:answer” 奇怪的是,这个函数做的第一件事就是将传递的项打印到日志中。当它运行时,它显示函数已经运行。下一行打印出item

好吧,这看起来很奇怪

我有一个目录,里面用一个名为
items
的数组中的
ng repeat
填充了项目,当用户选择一个项目时,会出现一个对话框,询问用户一些额外的信息(刚才,只有一个新的用户名),当他们点击提交时,会调用一个
addToCart(item)
函数并传递所选项目

作为函数的一部分,它将
对象中的
Question[]
变量更改为如下
Question=“Question:answer”

奇怪的是,这个函数做的第一件事就是将传递的项打印到日志中。当它运行时,它显示函数已经运行。下一行打印出
items
数组,该数组显示对传递的项所做的更改已应用于原始项


据我所知,传递的变量被视为原始值no?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;
    }

}
this.addToCart=功能(项目,类别){
console.log(“==================================”);
控制台日志(项目);
控制台日志(catCon.项目);
console.log(“==================================”);

如果(item.qty==undefined | | item.qtyNope,则传递的对象是对列表上对象的引用,而不是其副本


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

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


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

您能生成一个复制此对象的plunker吗?请添加一个片段!“据我所知,传递的变量被视为原始值的副本否?”这不一定正确。如果传递的参数是对象,则通过引用传递,这意味着它将更改原始值。能否生成一个复制此参数的plunker?请添加一个片段!“据我所知,传递的变量被视为原始值的副本否?”这不一定正确。如果传递的参数是对象,则通过引用传递,这意味着它将更改原始参数。