2016-01-13 2 views
7

J'ai utilisé le bouton d'édition. après avoir édité j'ai enregistrer et annuler le bouton .save fonctionne comme je m'y attendais mais pas le bouton d'annulation. si je clique sur le bouton d'annulation après avoir essayé de modifier, il devrait montrer le texte précédent. quelqu'un peut-il s'il vous plaît aidez-moi
js violon ici http://jsfiddle.net/F7K63/143/Comment mettre en œuvre le bouton d'annulation pour la fonctionnalité d'édition dans angularjs

<tr ng-repeat="item in items"> 
     <td> 
      <span ng-hide="item.editing">{{item.name}} <button ng-click="editItem(item)">Edit</button></span> 
      <input ng-show="item.editing" ng-model="item.name" autofocus /> 
      <button ng-show="item.editing" ng-click="doneEditing(item)">Save</button> 
      <button ng-show="item.editing" ng-click="Cancel(item)">Cancel</button> 
     </td> 
    </tr> 
+0

Vous devez effectuer une copie de l'élément que vous souhaitez modifier. Si vous appuyez sur Annuler, remplacez l'origine par la copie. – Christoph

+0

pouvez-vous montrer dans le jsfiddle ci-dessus s'il vous plaît –

+2

Ce violon peut aider: http://jsfiddle.net/7Lbjuhsq/ – pixelbits

Répondre

8

Faites une copie de votre objet que vous souhaitez modifier. Si vous appuyez sur annuler, remplacez l'origine. Voir le fiddle

$scope.editItem = function (item) { 
    item.editing = true; 
    item.backupName = angular.copy(item.name); 
} 

$scope.doneEditing = function (item) { 
    item.editing = false; 
    delete item.backupName; 
    //do some background ajax calling for persistence... 
}; 
$scope.Cancel = function (item) { 
    item.editing = false; 
    item.name = angular.copy(item.backupName); 
    delete item.backupName; 
}; 
1

L'option la plus rapide est de modifier vos fonctions scope.eidtItem $ et scope.Cancel $.

$scope.editItem = function (item) { 
    item.editing = true; 
    item.oldName = item.name; 
} 

...

$scope.Cancel = function (item) { 
    item.editing = false; 
    item.name = item.oldName; 
}; 

http://jsfiddle.net/F7K63/147/

+0

J'ai inclus un jsfiddle. Ça devrait aller. S'il te plaît vérifie le. –

+0

item.oldName et item.name font référence au même objet. – Christoph

+0

@Christoph item.oldName et item.name sont des chaînes, et ce sont des propriétés distinctes de l'objet item. Je pense que c'est OK. Quel problème voyez-vous? Vous pouvez voir le contenu de l'objet item ici: http://jsfiddle.net/F7K63/148/ Vous n'avez pas besoin d'utiliser angular.copy pour copier une seule chaîne. –