2016-04-07 5 views
1

Ich habe ein Problem.

app.controller('groupConfigCntrl', ['$http', '$scope', '$routeParams', function($http, $scope, $routeParams){ 

      var id = $routeParams.id, 
       info = {}; 
      $http.post("/g/getGroup/", {id: id}).success(function(data) { 
       $scope.info = data; 
      }); 
       console.log($scope.info); 
    }); 

In diesem Fall ist $ scope.info nicht definiert.

 $http.post("/g/getGroup/", {id: id}).success(function(data) { 
      $scope.info = data; 
      console.log($scope.info); 
     }); 

In diesem Fall scope.info $ - haben einige Daten. Warum verhalten sich $ scope wie eine lokale var? Hilfe, es funktioniert nicht, wenn ich versuche, Daten in Ansichten zu binden. Aber in einem ähnlichen Controller funktioniert es.

-Controller, was funktioniert:

app.controller('groupCntrl', ['$http', '$scope', '$uibModal', '$routeParams', '$location', function($http, $scope, $uibModal, $routeParams, $location){ 
    var id = $routeParams.id; 
    $http.post("/g/getGroup/", {id: id}).success(function(data) { 
     $scope.info = data; 
    }); 
}) 
+4

Die Funktion innerhalb .success ist ein Callback. Es wird asynchron aufgerufen, nachdem das Ergebnis gekommen ist. Daher sehen Sie den Unterschied. $ scope verhält sich nicht wie eine lokale Variable. – Avinash

+0

Verschieben Sie die Anweisung innerhalb des Erfolgs Callback –

+0

Aber warum in Ansichten, kann ich nicht mit diesem var binden, aber in ähnlichen Controller funktioniert es gut? –

Antwort

-2

Die Variablen $scope.info innerhalb des Erfolgs Rückruf nach der $http Post definiert ist abgeschlossen.

$http.post("/g/getGroup/", {id: id}).success(function(data) { 
       $scope.info = data; 
       console.log($scope.info); 
      }); 

Sie nicht $scope.info zugreifen können, wie es vor dem $http Anruf nicht definiert ist.

+0

Warum die Downvotes? Ist irgendwas falsch? Bitte erläutern Sie –

+0

Sorry, aber ich bin es nicht. –

+0

Ich weiß. Aber die Leute, die hier abstimmen, sollten hier etwas sagen, was falsch ist. Gut, kein Problem. und haben Sie das Problem verstanden, vor dem Sie standen? Weil Sie nur Ihre '$ scope.info' innerhalb des' $ http' Erfolgs definieren müssen. Ihre Ansicht ist verfügbar, nachdem die Daten definiert wurden. :) –

0

Dies ist wegen callback. Wenn Sie im ersten Fall console.log sind, wird es ausgeführt, bevor der Rückruf zurückgegeben wird, und $scope.info ist zu diesem Zeitpunkt undefined. Sie haben die folgenden erwarteten Ergebnisse zu erhalten:

app.controller('groupConfigCntrl', ['$http', '$scope', '$routeParams', function($http, $scope, $routeParams){ 

      var id = $routeParams.id, 
       info = {}; 
      $http.post("/g/getGroup/", {id: id}).success(function(data) { 
       $scope.info = data; 
       console.log($scope.info); 
      }); 

    }); 

Sie in nexttick aussehen kann, wenn man wie callback Werke in Javascript verstehen wollen. Bsp .: https://howtonode.org/understanding-process-next-tick

0

In Ihrem Beispiel ist die .success() -Methode ein Callback. Diese Methode wird asynchron ausgeführt, wenn die Post-Methode abgeschlossen ist.

Dies bedeutet, dass der Wert $ scope.info möglicherweise noch nicht festgelegt wurde, wenn Sie die Ausgabe in Ihrem ersten Beispiel protokollieren.

Nach Ihren Kommentaren zu urteilen, vermute ich das Problem, dass die Ansicht nicht aktualisiert wird, wenn der Wert $ scope.info festgelegt ist? Wenn dies der Fall ist, müssen Sie Ihren Callback in die $ apply -Methode umbrechen.

+0

Ich tat dies bereits, aber es auch nicht 't Arbeit –

+0

Bin ich richtig in der Annahme, dass das Problem, das Sie haben, ist, dass Sie nicht die Variable an Ihre Sicht binden können? –

+0

Genau ja .... –

Verwandte Themen