2016-07-14 11 views
0

in Ordnung zu ändern, scheint dies ein sein sonderbarenAngularJS falsche Variable

Ich habe einen Katalog mit Gegenständen gefüllt mit einem ng-repeat aus einem Array items aufgerufen, wenn der Benutzer ein Element auswählt, erscheint ein Dialog den Benutzer auffordert, für einige zusätzliche Informationen (gerade jetzt, nur ein neuer Benutzername), wenn sie auf Senden treffen, wird eine Funktion aufgerufen und übergibt das ausgewählte Element.

als Teil der Funktion es ändert sich die Question[] Variable in der item Objekt wie dieses Question = "question:answer"

schauen

hier, wo es seltsam gets, das erste, was diese Funktion tut, ist das übergebene Element in das Protokoll drucken. Wenn dies der Fall ist, wird angezeigt, dass die Funktion bereits ausgeführt wurde. In der nächsten Zeile wird das Array items ausgedruckt, aus dem hervorgeht, dass die Änderungen an dem Element, das übergeben wurde, auf das ursprüngliche Element angewendet wurden.

nach bestem Wissen, eine übergebene Variable wird als eine Kopie des ursprünglichen Wertes behandelt nein? 0.o

kann jemand sehen, was ich falsch gemacht habe? ... oder haben Sie irgendwelche Gedanken über die Lösung für diese Probleme?

hier ist der Code:

die 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> 

und die addToCart Funktion:

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; 
    } 

} 

wenn Sie etwas anderes zu sehen, fragen Sie einfach und ich werde liefern. Danke

+0

Können Sie einen Plotter produzieren, der das reproduziert? –

+0

Könnten Sie bitte ein Snippet hinzufügen? –

+0

"nach meinem besten Wissen wird eine übergebene Variable als eine Kopie des ursprünglichen Wertes behandelt?" Das ist nicht unbedingt richtig. Wenn das übergebene Argument ein Objekt ist, wird es als Referenz übergeben, was bedeutet, dass es das Original ändert. –

Antwort

2

Nein, das übergebene Objekt ist eine Referenz auf das Objekt in der Liste. Keine Kopie davon.

Sie können angular.copy() verwenden, um das Objekt für den Einkaufswagen tief zu kopieren und zu ändern.

Verwandte Themen