6
votes

Comment mettre à jour les valeurs de répétition NG dans les JS angulaires?

Je suis nouveau dans JS angulaires, j'ai un tableau que je suis en boucle via la directive NG-REPEET CODE>, et j'ai écrit le code pour copier, supprimer et éditer des valeurs dans le tableau.

Si je veux supprimer ou copier, je peux le faire, fait? Mais si je clique sur Modifier une case popup apparaîtra, je souhaite modifier les valeurs que ces valeurs mises à jour doivent mettre à jour dans la matrice. P>

Comment puis-je le faire? P>

      var myApp=angular.module('myApp',[]);
      myApp.controller('myCon',function($scope){
      $scope.items=[{id:1,pname:'box1'},{id:2,pname:'box2'}, {id:3,pname:'box3'}];

    $scope.removeStudent=function($index){
      $scope.items.splice($index,1);
    }
  $scope.copyrow=function($index){

     $scope.len=$scope.items.length;
     $scope.ids=$scope.items[$index].id;
     $scope.pnames=$scope.items[$index].pname

     $scope.items.push({
          id:$scope.len+1,
          pname:$scope.pnames 
      });
  }
  $scope.editrow=function($index){
     $scope.istrue=true;
     $scope.editedid=$scope.items[$index].id;
     $scope.editedname=$scope.items[$index].pname;
  }
  $scope.closepopup=function(){
     $scope.istrue=false;

  }
  $scope.save=function($index){
     $scope.istrue=false;
     $scope.s.name=$scope.editedname;
  }
 });


0 commentaires

4 Réponses :


14
votes

Le moyen le plus simple consiste à utiliser angular.copy pour créer Un clone de l'objet lorsque Modifier est cliqué, puis lorsque vous avez cliqué sur Enregistrer, copiez les données sur l'élément de la matrice.

premier intitilisé $ périmètre.ediditem P>

<div class="editpopup editpopup-{{istrue}} ">
    <p>edit id:<input type="text" ng-model="editedItem.id"></p>
    <p>edit pname:<input type="text" ng-model="editedItem.pname"></p>
    <button ng-click="save()">save</button>
    <button ng-click="closepopup()">cancel</button>
 </div>


1 commentaires

Cela a bien fonctionné pour moi, y a-t-il une autre manière possible? Ou peut-être en angular2? Merci



0
votes

Premièrement, enregistrez l'ancienne valeur comme ceci: xxx

puis, lorsque vous enregistrez, trouvez simplement le bon objet à l'aide de l'ancienne valeur et attribuez de nouvelles valeurs comme celle-ci: xxx

jsfiddle


0 commentaires

4
votes

J'ai eu ce même problème. Voici mon correctif


P>

Mon code d'origine qui n'a pas mis à jour l'objet P>

<div class="info" ng-repeat="email in vm.contactData.emails.other">
      <input type="text" ng-model="vm.contactData.emails.other[$index].email" />
</div> 


0 commentaires

0
votes

Prélompre d'abord la variable $ étendue.getindex = 0; code> et obtenez l'index du tableau d'éléments lorsque vous cliquez sur le bouton Enregistrer. Attribuez ensuite $ index code> à cette variable.

Vous pouvez maintenant obtenir éléments [$ portée.getindex] code> n'importe où dans le contrôleur. Et vous aider à mettre à jour les éléments Array: P>

$scope.getIndex=0;
$scope.editrow=function($index){
     $scope.getIndex=$index;
     $scope.istrue=true;
     $scope.editedid=$scope.items[$index].id;
     $scope.editedname=$scope.items[$index].pname;
}

$scope.save=function($index){
    $scope.istrue=false;
    $scope.items[$scope.getIndex].id=$scope.editedid;
    $scope.items[$scope.getIndex].pname=$scope.editedname;
}[enter link description here][1]


0 commentaires