2017-04-03 11 views
0

私は、ファクトリ関数でAngularJsの配列を取得しています。これは、コンソールjavascriptで配列形式を取得するには?

Array[0] 
    0: "value1" 
    1: "value2" 
    length:2 

ですが、私は、ループバックでのMySQLからデータを取得し、配列

console.log(array.length) 

の長さを取得したいとき

app.factory("getFoo", function(Communications){ 
return { 
    getCommi: function(val,id){ 
    var array = []; 
    var myVals = Communications.find({ 
        filter: { 
         where: { 
          and : [{ 
           communications_type_code : val 
          },{ 
           object_id : id 
          }] 
         } 
        } 
       }, function(data){ 
        for(var i=0; i< data.length; i++){ 
         array[i] = data[i].contact_value; 
        } 
        return array; 
     }); 

     return array; 
     } 
    } 
}); 

のようなコントローラの外観:

app.controller('usersFormCtrl', ['$scope','getFoo',function($scope,getFoo){ 
var emails = getFoo.getCommi(3,1); 

setTimeout(function(){ 
    $scope.formModel.emails = []; 
    for(var index=0; index < $scope.emails.length; index++){ 
     $scope.emails = emails; 
    } 
}, 0) 
}]) 

私はそれを得る彼の長さは0です。なぜですか?

+2

あなたのコードをもっと共有してください。あなたはコンソールにログインし、どこに配列を取得しますか? – tanmay

+0

どのように要素を配列に追加しますか?親切に共有してください。あなたの表示コードは適切で、配列に要素を追加している間は問題があると思います。これを確認してください:http://stackoverflow.com/questions/36401124/how-to-display-the-array-length-in-console-with-javascript-angularjs –

答えて

1

これはタイミングの問題です。初めて長さを尋ねると、実際には0になりますが、数秒後にChrome Dev Toolsを使用してオブジェクトを検査すると、現在埋められているライブオブジェクトが検査されます。

あなたが代わりにsetTimeout$timeoutを使用し、さらに説明角度で

UPDATE

このlinkをチェックアウトすることができますsetTimeout

setTimeout(function(){ 
    console.log(array); 
}, 0) 

を使用してこれを確認することができます。このように:

$timeout(function(){ 
    console.log(array); 
}, 0) 
+0

それは働いています。しかし、私は角度を使用しているので、私はスコープでそれを使用しています。私は私の質問を更新する。 – oded

+0

@oded:私は自分の答えを更新しました。なぜ私のmistaske –

+0

答えがdownvotedされたことを教えてください。事故を起こす。 – oded

0

JavaScriptの配列のlengthプロパティは不変です。 var = new Array(2)、または値を渡すだけで、var a = ['value1'、 'value2']のようにプロパティの数を定義することで、配列のサイズを設定できます。

-1

console.log(array[0].length) 
+0

これを試してみてください。うまくいきません – oded

+0

lengthが '0'を返す場合、array [0] .lengthはエラーを投げます。 '不定期の長さ' – Rajesh

+0

あなたはこれに関連して、あなたのJavaScriptコードを追加することができます –

0

あなたがここに同期アプローチと非同期を混ぜ、これを試してみてください。

Communications.findは非同期ですが、同期機能のようにgetCommiで使用します。

getCommiを呼び出すと、関数はすぐに空のarrayで戻ります。

以下で変更してください。

app.factory("getFoo", function(Communications){ 
return { 
    getCommi: function(val,id, cb){ 
    var array = []; 
    var myVals = Communications.find({ 
        filter: { 
         where: { 
          and : [{ 
           communications_type_code : val 
          },{ 
           object_id : id 
          }] 
         } 
        } 
       }, function(data){ 
        for(var i=0; i< data.length; i++){ 
         array[i] = data[i].contact_value; 
        } 
        cb(null, array); 
     }); 
     } 
    } 
}); 

app.controller('usersFormCtrl', ['$scope','getFoo',function($scope,getFoo){ 
getFoo.getCommi(3,1, function(err, emails){ 
    $scope.formModel.emails = []; 
    for(var index=0; index < $scope.emails.length; index++){ 
     $scope.emails = emails; 
    } 
});  
}]) 

免責事項:私は角知りません。

関連する問題