2016-03-21 17 views
0

Ich habe Probleme beim Aktualisieren meines Bereichs von innerhalb dieser Funktion updateRefresh(). Die erste Iteration kann ich sehen, dass message == "test", und dann ist es überschreibt, was im Rahmen ist, aber auf meiner HTML-Seite, was sie verbindlich ist, <span>{{refreshDomainStatus.message}}</span> wird noch an das Objekt gebunden, wo message="test"Scope-Bindung nicht in HTTP-Aufruf aktualisieren

ich $scope.$apply() versucht, aber es sagt, dass $digest derzeit in Bearbeitung ist.

app.controller('AssessmentController', ['$scope', '$http', '$timeout', 'ConnectionService', function ($scope, $http, $timeout, connectionService) { 

    $scope.refreshDomainStatus = { 
     message: "test" 
    }; 

    var updateRefresh = function(updateKey) { 
     $http.get('/assessment/api/update-refresh-domain/' + updateKey).success(function(response) { 
      $scope.refreshDomainStatus = response.refreshDomainStatus; 

      if (!response.refreshDomainStatus.halted) { 
       $timeout(function() { updateRefresh(updateKey); }, 250); 
      } 
     }); 
    } 

Erste Iteration: First Iteration

Zweite Iteration: Second Iteration

Nach Abschluss und Prüfung der Kontext: After

+0

Wenn Sie 'console.log (response.refreshDomainStatus);' in Ihrer 'updateRefresh()' Methode, was die Ausgabe? Auch offensichtliche Frage, aber Sie rufen 'updateRefresh()' irgendwo auf, um die ganze Schleife zu beginnen, richtig? – Lex

+0

Ja, ich rufe es an, den ganzen Prozess zu starten. Erste Iteration: 'response.refreshDomainStatus => Objekt {Fehler: false, Nachricht:" Abrufen der Benutzerliste ", angehalten: false}'. '$ scope.refreshDomainStatus => Objekt {Fehler: true, Nachricht:" test ", angehalten: false}'. Bei der zweiten Iteration wurde $ scope.refreshDomainStatus gesetzt. Scheint so, als wäre es korrekt. Wenn ich den Geltungsbereich des Elements überprüfe, das immer noch "test" sagt: angle.element ($ 0) .scope(). RefreshDomainStatus => Objekt {message: "test", angehalten: false, error: false} ' – Bluebaron

Antwort

1

Sollten Sie setzen nicht $scope.refreshDomainStatus-response.refreshDomainStatus?

$http.get('/assessment/api/update-refresh-domain/' + updateKey).success(function(response) { 
     $scope.refreshDomainStatus = response.refreshDomainStatus; 

     if (!response.refreshDomainStatus.halted) { 
      $timeout(function() { updateRefresh(updateKey); }, 250); 
     } 
    }); 
+0

Ja. Du hast recht. Entschuldigung, ich habe versucht zu sehen, ob das Problem ein Referenzproblem war. Funktioniert immer noch nicht. – Bluebaron

+0

Haben Sie irgendwelche Konsolenfehler überprüft? Ihre $ http wurde möglicherweise nicht aufgelöst – amcpanaligan

+0

Erste Iteration: http://imgur.com/HLVzmHA Zweite Iteration: http://imgur.com/mzxDeww Nach Abschluss (Überprüfung des Bereichs in der Konsole): http://imgur.com/DCfQ4Bh – Bluebaron

0

Mein Problem war, dass ich zwei Instanzen des Controllers erstellt habe. Ich glaube, ich irgendeine Art von Singleton will, sondern auch für die Zukunft, das ist schlecht:

 <div class="row" ng-controller="AssessmentController"> 
      <div class="col"> 
       <button class="btn btn-default" ng-click="refresh()">Refresh</button> 
      </div> 

     </div> 
     <div ng-show="" class="row" ng-controller="AssessmentController"> 
      <div class="col"> 
       <span>{{refreshStatus.message}}</span>  
      </div> 
     </div>