2016-03-22 10 views
0

Ich bin ein Neuling in AngularJs und weiß nicht wirklich, wie die Länge der Antwort außerhalb der Funktion erhalten.Angularjs Umfang Länge außerhalb der Funktion

var onUsers = function(response){    
    $scope.users = response.data;  
    console.log($scope.users.length); //here works 
    } 

Aber wenn ich versuche, außerhalb onUsers Funktion

console.log($scope.users.length); 

ich einen Fehler.

+0

Haben Sie irgendetwas mit 'console.log ($ scope.users)'? – Konkko

+0

Sie greifen auf '$ scope.users' zu, bevor ihr 'response.data' zugewiesen wird. '$ http' ist die Rückgabe von Promise, so dass Sie auf die Daten zugreifen müssen, nachdem das Versprechen gelöst wurde. – peteb

+0

@peteb ja das ist die Lösung, danke! –

Antwort

1

Ich denke, das Problem ist, dass Sie versuchen, auf $ scope.users.length zuzugreifen, bevor Ihre Antwort vom Server zurückgegeben wurde. Also ist $ scope.users immer noch undefiniert. Dies ist ein klassisches Problem von asynchronem JavaScript und Sie müssen dafür Versprechungen verwenden. Das bedeutet, dass Sie den Code, den Sie gerade ausführen, an Onsers im Zusage-Callback schreiben sollten.

dies lesen: https://docs.angularjs.org/api/ng/service/ $ q

+0

Ja, ich habe versucht, das vor der Antwort zu bekommen. Danke für die ausführliche Erklärung! –

0

die Winkel Code asynchron so console.log($scope.users.length) Läufe ausgeführt wird, bevor das Versprechen zurück.

var onUsers = function(response){    
     $scope.users = response.data;  
     console.log($scope.users.length); //here works 
     } 

Ihre console.log($scope.users.length) in obiger Funktion funktioniert, weil es ein Erfolg Handler ist. Sie können die console.log Seite der Erfolg Handler mit $timeout funktioniert. Ich nehme an, dass nach 5000 Ihre Antwort ankommen wird.

+0

Ja, das ist auch eine andere Lösung, danke! –

1

Sie können $ scope. $ Watch für die Ausführung einer Funktion verwenden, wenn sich die Variable ändert.

$scope.$watch('users', function(users) { 
    console.log(users.length); 
}); 
+0

Vielen Dank für Ihre Antwort, ich werde es in Betracht ziehen. –

Verwandte Themen