2

Wie kann ich den Wert eines ng-Modell in der Steuerung nach einem ngChange zurücksetzen, ohne dass eine Richtlinie mitReset-ng-Modellwert von der Steuerung nach ng Wechsel

<div ng-repeat="i in items"> 
    <!-- Some DOM comes here --> 

    <select ng-model="i.avail" ng-change="changeAvail(i.id, i.avail)"> 
     <option value="true">Available</option> 
     <option value="false">Unavailable</option> 
    </select> 

    <!-- More DOM follows --> 
</div> 

Dem Javascript in der Steuerung wird wie folgt

$scope.changeAvail = function(itemId, value){ 
    if(confirm("You cannot undo this action")){ 
     //Send an ajax request to backend for an irreversible action 
    } 
    else{ 
     //Restore input to initial value; 
    } 
} 

ich würde keine Richtlinie nur für diesen einzigen Vorkommen

+0

senden Wenn Sie den Modellwert außerhalb des Digest Zyklus ändern, können Sie auf Probleme stoßen, wenn der Wert nicht tatsächlich aktualisiert. Versuchen Sie in diesem Fall '$ watch()' in Ihrer 'changeAvail()' Methode zu verwenden. –

Antwort

1

Sie sollten Idealerweise lagern alte Wert von Elementen innerhalb Umfang & implementieren möchten tun t verwenden Saum später, um zum ursprünglichen zurückzukehren.

$scope.loadItem = function(){ 
    $http.get('/api/getitems').then(function(response){ 
     $scope.items = response.data; 
     $scope.oldCopy = angular.copy($scope.items); //do it where ever you are setting items 
    }); 
} 

tun Dann ganzen Artikel zu ng-change Verfahren wie ng-change="changeAvail(i)"

$scope.changeAvail = function(item){ 
    if(confirm("You cannot undo this action")){ 
     //save object 
     $http.post('/api/data/save', item).then(function(){ 
      //alert('Date saved successfully.'); 
      $scope.loadItem(); //to update items from DB, to make sure items would be updated. 
     }) 
    } 
    else{ 
     //get current old object based on itemId, & then do revert it. 
     var oldItem = $filter('filter')($scope.oldCopy, {itemId: item.itemId}, true) 
     if(oldItem && oldItem.length){ 
      item = oldItem[0]; //filters return array, so take 1st one while replacing it. 
     } 
    } 
} 
+0

Ich hatte bereits eine alte Kopie des Objekts. Was ich brauchte, war eine Möglichkeit, den Wert des Gegenstandes zu ändern. Ich wusste nie, dass ich ein Objekt direkt manipulieren könnte, wenn es an eine Funktion übergeben wird. Ich habe item.avail = oldItem.avail verwendet. Und es hat funktioniert. Danke – elSama

+0

@elSama cool .. Ich zeigte dir einfach ideale Art und Weise..wie ich das umsetzen .. Froh zu wissen, dass es geholfen hat .. Danke :-) –

Verwandte Themen