2017-04-27 2 views
0

war ich Daten wie diese in scope Variable alsVergleich zweier Arrays und die Daten bekommen, wie es

$scope.myData = 
    { 
     "firstName": "rocky", 
     "lastName": "P", 
     "place": "Koraput", 
     "education": [ 
     { 
      "id": "764006" 
     }, 
     { 
      "id": "764001" 
     } 
     ], 
     "email": "[email protected]", 
     "id": "46ads75asda7s6d57ad" 
    } 

Fall bin Speicherung: Angenommen, ich bin diese Daten zu aktualisieren. Ich fügte Bildung hinzu und dann klicke ich cancel. Wie kann man die aktuell hinzugefügte Bildung entfernen, indem man auf Abbrechen klickt und die Daten abruft, die nur zwei Bildungseinheiten sind, wie oben bei Klick auf edit user erwähnt?

+0

Bitte bearbeiten Sie die Frage. Es ist nicht klar, was Sie zu fragen versuchen. – ScrapCode

+0

Sie können eine Kopie von Ihrem ursprünglichen Array haben, wenn Sie bearbeiten und wiederherstellen, auf Abbrechen vielleicht? – tanmay

+0

Verwenden Sie '.push()' beim Hinzufügen von Daten zu Ihrer Schulung, dadurch werden die Daten am Ende des Arrays hinzugefügt. Wenn Sie abbrechen, verwenden Sie '.pop()'. Dadurch werden die zuletzt hinzugefügten Daten entfernt. – Jalil

Antwort

0

können Sie angular.copy() Methode verwenden, um eine Kopie Objekt von Original-Array zu haben und nur einen Verweis darauf, wenn Sie abbrechen:

var app = angular.module('demoApp', []); 
 

 
app.controller('demoCtrl', function($scope) { 
 
    $scope.myData = { 
 
    "firstName": "rocky", 
 
    "lastName": "P", 
 
    "place": "Koraput", 
 
    "education": [{ 
 
     "id": "764006" 
 
    }, { 
 
     "id": "764001" 
 
    }], 
 
    "email": "[email protected]", 
 
    "id": "46ads75asda7s6d57ad" 
 
    }; 
 
    $scope.copy = angular.copy($scope.myData.education); 
 
    $scope.onAdd = function() { 
 
    $scope.myData.education.push({ 
 
     id: $scope.myData.education.length 
 
    }); 
 

 
    }; 
 
    $scope.onCancel = function() { 
 
    $scope.myData.education = $scope.copy; // <----reset to original 
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.min.js"></script> 
 
<div ng-app="demoApp" ng-controller="demoCtrl"> 
 
    <pre>{{myData.education}}</pre> 
 
    <button ng-click="onAdd()">+</button> 
 
    <button ng-click="onCancel()">X</button> 
 
</div>

1

Sie zwei separate halten sollten Objekte, eines, das das ursprüngliche, unveränderte Objekt ist, und das andere, das zum Bearbeiten verwendet wird. Sobald der Benutzer klickt, sagen Sie save, nur dann sollten Sie das erste Objekt mit dem zweiten überschreiben. Nachdem Sie auf cancel geklickt haben, können Sie den Wert des bearbeitbaren Objekts einfach auf einen Klon der ursprünglichen Daten zurücksetzen.

Sie würden aus starten, indem Sie das ersten Objekt in ein neues, zweites Objekt klonen:

// Your original data (unchanged) 
$scope.myData = { /* ... */ }; 

// Your object for editing purposes 
$scope.myDataClone = clone($scope.myData); 

$scope.cancel = function() { 
    // reset the 'editable' clone to the unchanged value of myData 
    $scope.myDataClone = clone($scope.myData); 
} 

$scope.save = function() { 
    // Once the user accepts their changes, you can simply 
    // set the value of myData to a clone of the edited data. 
    // This will ensure you are not just creating a new pointer 
    // from myData to myDataClone, which would cause myData 
    // to change if you make subsequent requests to myDataClone. 
    $scope.myData = clone($scope.myDataClone); 
} 

// A clone function which takes an object and returns an exact 
// replica as a new object with a unique memory reference 
function clone(obj) { 
    return JSON.parse(JSON.stringify(obj)); 
} 
+0

Eine rohe Kopie zu behalten und sie zu vergleichen, während das Löschen für mich funktioniert. –

+0

Ist dies die Antwort, die Sie gesucht haben? –

+0

Ja. Anstatt clone() habe ich angular.copy() @Danny Bull verwendet –

0

Remove mit id

$scope.myData = 
    { 
    "firstName": "rocky", 
    "lastName": "P", 
    "place": "Koraput", 
    "education": [ 
    { 
     "id": "764006" 
    }, 
    { 
     "id": "764001" 
    } 
    ], 
    "email": "[email protected]", 
    "id": "46ads75asda7s6d57ad" 
    }; 

    //Remove specific item 
    $scope.onCancel = function(cancelId){ 

     for(var i in $scope.myData.education){ 
     if($scope.myData.education[i].id==cancelId){ 
     $scope.myData.education.splice(i, 1);; 
     break; 
     } 
    } 

    }; 
0

Sie eine Kopie des Hauptobjekts machen und während stornieren Sie können das Hauptobjekt mit der Kopie

aktualisieren und beim Speichern die Kopie mit neuem Objekt

wie

$scope.myData = 
    { 
    "firstName": "rocky", 
    "lastName": "P", 
    "place": "Koraput", 
    "education": [ 
    { 
     "id": "764006" 
    }, 
    { 
     "id": "764001" 
    } 
    ], 
    "email": "[email protected]", 
    "id": "46ads75asda7s6d57ad" 
    }; 
$scope.copymyData = angular.copy($scope.myData); 
$scope.cancel = function(){ 
    $scope.myData = angular.copy($scope.copymyData); 
} 
$scope.save = function(){ 
    $scope.copymyData = angular.copy($scope.myData); 
} 
0

Wir können dies durch, mit Push- und Pop erreichen

HTML:

<button ng-click="cancel()">cancel</button> 

Controller:

$scope.myData =[]; 
    $scope.myData = [ 
    { 
    "firstName": "rocky", 
    "lastName": "P", 
    "education":'MBA', 
    "place": "Koraput", 
    "email": "[email protected]", 
    "id": "46ads75asda7s6d57ad" 
    }]; 

    $scope.myData.push({ 
     education : 'BE' 
    }) 

    $scope.cancel = function(){ 
    var lastElement = $scope.myData.pop(); 
    }