Угловой нг-повтор не обнаруживает изменений

0

Я использую ng-repeat для ng-repeat ответа json через http.get(). Внутри обратного вызова success() я запускаю for-loop для создания нового массива, который должен обрабатываться другим 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>

Поэтому мне нужно ng-repeat, чтобы обнаружить изменения в $scope.onboardingCompanies. Я знаю, что здесь есть какая-то асинхронная проблема.

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 ваш объект и полученные данные.
  • 1
    Поскольку данные, которые вы просматриваете, являются объектом, а не массивом (который также является объектом), в этом случае вы можете сделать что-то вроде: <tr ng-repeat = "(ключ, значение) в данных"> <td> { {key}} </ td> <td> {{value}} </ td> </ tr>
Теги:

1 ответ

1
Лучший ответ

Ваш HTML неправильный: Угловой не дает вам объект с атрибутами key и value, он дает вам их отдельно:

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

Форма, которую вы использовали ng-repeat="item in onboardingCompanies" будет пытаться выполнить итерацию по массиву, но поскольку объект не является массивом, результат будет пустым.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню