2016-03-22 3 views
0

AngularJsの初心者で、実際に関数外の長さを取得する方法がわかりません。Angularjsスコープの長さ外関数

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

が、私は外onUsersが

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

に機能しようとすると、私はエラーを取得します。

+0

'console.log($ scope.users)'で何か手に入りますか? – Konkko

+0

'$ scope.users'に' response.data'が割り当てられる前にアクセスしています。 '$ http'はPromiseが返ってくるので、Promiseが解決した後にデータにアクセスする必要があります。 – peteb

+0

@petebはいthatsソリューション、ありがとう! –

答えて

1

私は問題はあなたの応答がサーバーから返される前に$ scope.users.lengthにアクセスしようとしていることだと思います。 $ scope.usersはまだ定義されていません。これは非同期のjavascriptの古典的な問題で、このために約束を使用する必要があります。 これは、約束のコールバックにonUsersの外で実行しているコードを記述する必要があることを意味します。

この読み:角度コードはそう約束が返さconsole.log($scope.users.length)実行する前に、非同期に実行AS https://docs.angularjs.org/api/ng/service/ $ qを

+0

はい、私は応答の前にそれを取得しようとしていました。詳細な説明をいただきありがとうございます! –

0

を。

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

上記の関数のconsole.log($scope.users.length)は、成功ハンドラであるために機能します。 $timeoutを使用して、console.logが正常に処理されるようにすることができます。私はあなたの応答が5000になると仮定しています。

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

そうです、もう一つの解決策です、ありがとう! –

1

変数が変更されたときに関数を実行するには、$ scope。$ watchを使用できます。

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

あなたの答えをありがとう、私はそれを考慮に入れます。 –

関連する問題