2016-03-24 21 views
0
aktualisieren

Ich habe eine Liste, die ich ng-repeat und einmalige Bindung verwenden, da es keine Notwendigkeit für mich zu aktualisieren, sobald ich die Daten habe.AngularJS OneTime Binding mit ng-repeat lässt mich nicht Bereich

Ich hatte gehofft, dass ich einmalige Bindung verwenden und einen Digest erzwingen konnte, aber ich bekomme den allgemeinen Fehler, dass ein $digest is already being processed oder was auch immer es ist.

sieht Ihr Code wie folgt

$scope.$on(IonicEvents.beforeEnter, function() { 
     Locations.getAllLocations() 
      .then(function(allLocations) { 
       $scope.model.locations = allLocations; 
       //I have tried $scope.$digest().. 
       //also $scope.$apply()... 

      }, function(error) { 
       $log.error('Error retrieving locations'); 
      }) 
    }); 

Mein ng-repeat in meiner Vorlage wie folgt aussieht:

<ion-item class="item" ng-repeat="location in ::model.locations"> 
     <div class="row"> 
      <div class="col"> 
       <p>{{::location.name}}</p> 
      </div> 
     </div> 
    </ion-item> 

Irgendwelche Ideen oder bin ich völlig off-track?

Antwort

0

Ich denke Zuerst überprüfen kann if (! $ Rahmen. $$ Phase) dann proccess gelten

$scope.$on(IonicEvents.beforeEnter, function() { 
if(!$scope.$$phase) { 
    Locations.getAllLocations() 
     .then(function(allLocations) { 
      $scope.model.locations = allLocations; 
      //I have tried $scope.$digest().. 
      //also $scope.$apply()... 

     }, function(error) { 
      $log.error('Error retrieving locations'); 
     }) 
    } 
}); 
+0

keine Notwendigkeit für $ Scope. $$ Phase. Es ist nur für den internen Gebrauch geeignet. Und es wird in Zukunft nicht unterstützt. –

+0

meinst du neue Version überspringen diesen Schritt ?? –

+0

Bitte überprüfen Sie diesen Link. [link] (http://stackoverflow.com/questions/20263118/what-is-phase-in-angularjs) –

0

Ja, ich glaube, Sie sind Off-Track.

Meine Idee für Ihre spezielle Situation würde ein Klon-Objekt (ohne Bezug auf das Hauptobjekt), wenn sie von Locations.getAllLocations() mit

$scope.clonedLocationObj = angular.copy($scope.model.locations); 

und machen dieses Objekt zu Ihrer Ansicht abgerufen werden unter Verwendung, so dass sie gewonnen Triff dein Hauptobjekt nicht.

In Bezug auf die einseitige Bindung lässt Angular das erneut gebundene Modell nicht erneut ändern, da, wenn wir einen Wert wie {{:: foo}} innerhalb des DOM deklarieren, dieser foo Wert einmal wird Definiert, Angular rendert es, löst es von den Beobachtern und reduziert somit das Volumen der Bindungen innerhalb der $ Digest-Schleife. Einfach! angular one time binding syntax article

Ich hoffe, es hilft.

Verwandte Themen