2016-06-01 8 views
0

私はでjsonレスポンスを反復するのにng-repeatを使用しています。 success()コールバック内では、forループを実行して別のng-repeatによって処理される新しい配列を作成します。Angular ng-repeatが変化を検出しない

コード:

$http({ 
    method: "GET", 
    url: "xxx", 
    headers: { 
    "Accept": "application/json;odata=verbose" 
    } 
    }).success(function (data, status, headers, config) { 

    $scope.onboardings = data.d.results; 
    var counter = {}; 

    for (var i = 0; i < $scope.onboardings.length; i += 1) { 
      counter[$scope.onboardings[i].Company] = (counter[$scope.onboardings[i].Company] || 0) + 1; 
     } 

    $scope.onboardingCompanies = counter; 
    console.log($scope.onboardingCompanies); 
}) 

HTML:

<div ng-repeat="item in onboardingCompanies"> 
    <p>{{item.key}}</p> 
    <p>{{item.value}}</p> 
</div> 

だから私は$scope.onboardingCompaniesの変化を検出するためにNGリピートを必要としています。私はここにいくつかの非同期トラブルがあることを知っています。

console.log($scope.onboardingCompanies)

Object {Monjasa A/S (FRC): 35, C-bed BV: 2, Monjasa DMCC: 1, Monjasa Pte: 4, Monjasa SA: 9…} 

任意のアドバイスはありますか?

+0

ng-repeatは、受信したデータが非同期であっても、反復処理中の配列に更新がある場合、常にオブジェクトを追跡します。あなたのオブジェクトと受信したデータをconsole.logしてください。 – iyerrama25

+1

あなたが繰り返し処理するデータは配列ではなくオブジェクトでもあるので、この場合は次のようにします: ​​{{key}}​​{{value}} – iyerrama25

答えて

1

あなたのHTMLが間違っている:アンギュラはあなたkeyvalue属性を持つオブジェクトを与えるものではありません、それは別にあなたにそれらを与える:

<div ng-repeat="(key,value) in onboardingCompanies"> 
    <p>{{key}}</p> 
    <p>{{value}}</p> 
</div> 

あなたが角度ng-repeat="item in onboardingCompanies"を使用したフォームは、配列を反復処理しようとしますオブジェクトは配列ではないので、結果は空になります。

関連する問題