2017-05-31 2 views
1

Ich habe die Variable $ scope.parents, die sich im Controller "userCrtl" befindet. Das Problem ist, dass der Wert nach dem AJAX-Aufruf nicht aktualisiert wird. Ich habe versucht, $ q zu verwenden, um die Änderungen nach dem Ende des Versprechens anzuwenden; Das ist mir jedoch nicht gelungen. Ich habe versucht $ scope.watch zu verwenden, um Änderungen zu erkennen, aber diese Methode wird nie gestartet. Daher wird meine HTML-Seite nie aktualisiert. Wenn ich console.log ($ scope.parents) verwende, wird der Wert von $ scope.parents normal angezeigt, aber die HTML-Ansicht wird nicht aktualisiert. Wenn $ scope.parents mit einem Standardwert ($ scope.parents = "test") initialisiert wird, wird dieser Wert angezeigt, aber nicht mehr geändert. Die frustrierendste Sache ist, dass ich dasselbe in anderen Anwendungssteuerungen mache und alles gut funktioniert. Etwas bewirkt, dass nur zuvor definierte Werte für $ scope-Variablen in html angezeigt werden. Im Folgenden ist der Controller-Code:

app.controller("userCtrl", function($scope, userService, $http) { 
    $scope.panels = userService.get(); 
    $scope.parents = null; 
    $scope.start = function(panel) { 
     // Get parents blocks 
     $http.get(path + "getpaneluser /" + panel.painelUsername).then (function (response) { 
      $scope.parents = response.data; 
     // Here the value of parents is normally displayed 
        console.log($scope.parents); 
     }, function(error) { 
     }); 
    }; 
// Displays only null, even if $scope.parents has a value after the AJAX call 
    $scope.$Watch('parents', function() { 
     console.log($scope.parents); 
    }); 
}); 

HTML-Code.

<div class="col-lg-12" style="padding-right: 0%;"> 
{{parents}} <!-- value never displayed --> 
    <div ng-repeat="item in parents" class="declareContainer"> 
     {{item}} 
    </div> 
</div> 

Vielen Dank für Ihre Hilfe

+2

Sie haben einen Tippfehler in Ihrem Code: $ Scope. $ Watch sollte $ Scope sein. $ Uhr, aber das ist nicht der Grund für y unser Problem –

+0

Nur um alle Grundlagen abzudecken, können Sie bestätigen, dass die HTML-Vorlage, die Sie zur Verfügung gestellt haben, innerhalb der userCtrl und nicht unter dem Einfluss eines anderen Controllers ist? Das würde erklären, warum die Benutzeroberfläche weiterhin die alten Werte anzeigt und nicht die neuen Werte, die von userCtrl geladen werden, da die von der userCtrl gesetzten $ scope.parents in ihrem eigenen untergeordneten Bereich liegen und für Ihre HTML-Vorlage nicht verfügbar sind. – CodeWarrior

+0

So Freund, in den app.js innerhalb der Routing definieren Sie folgendes: templateUrl: 'views/panelUser.html', Controller: 'userCtrl' Ich glaube, dass rechts –

Antwort

2

nach dem Umfang Ajax-Aufruf gelten $ die Daten im Rahmen

$http.get(path + "getpaneluser /" + panel.painelUsername).then (function (response) { 
      $scope.parents = response.data; 
     // Here the value of parents is normally displayed 
        console.log($scope.parents); 
    $scope.$apply() 
     }, function(error) { 
     }); 
+2

Eigentlich ist das dann() Aufruf angewendet im Digest-Zyklus, so müssen Sie $ scope verwenden. $ apply(), um Ihre Änderung auf $ scope.parents –

+0

Mein Freund, das Problem geht weiter ... Ich weiß nicht, was ich noch versuchen soll. Kann ich den Wert von $ scope.parents nur im Backend über console.log ($ scope.parents) abrufen. In meinem Routing habe ich die HTML-Vorlage und den Controller für jede Route festgelegt. Tatsache ist, dass, wenn $ scope.parents mit einem Wert initialisiert wird, ich diesen Wert auf der HTML-Seite anzeigen kann. Wenn der Wert der Variablen geändert wird, bleibt das HTML statisch. –

+0

Ich denke, es wäre am besten, ein Video zu machen, um zu demonstrieren, was passiert, um das Problem besser zu verstehen. –

Verwandte Themen