2014-10-05 2 views
0

Я изучаю AngularJs, и я столкнулся с проблемой.

Я хочу показать массив предметов в представлении. Сначала в контроллере я определяю массив с помощью $ scope.arrName = [], затем я получаю данные от сторонней службы и добавляю их в массив с $ scope.arrName.push (данные [i]). Я понял, что для того, чтобы мое представление отображало изменения, я должен вставить $ scope. $ Apply после нажатия данных в массив.

Есть ли способ изменить массив и визуализировать изменения без $ scope. $ Apply? Почему код разбивается, если я изменяю $ scope.arraName с this.arrName? (Она бросает неперехваченный TypeError: Не удается прочитать свойство 'толчок' неопределенный)

Ссылки Код

Контроллер

angular.module('testApp') 
    .controller('testCtrl', function($scope) { 

    $scope.objects = []; 

    var service = new thirdPartyService(); 

    service.getData(function(err, data) { 
     if (err) { 
     console.log('Error'); 
     } else { 
     for (var i = 0; i < data.Contents.length; i++) { 
      $scope.objects.push(data.Contents[i].Key); 
      $scope.$apply(); 
     } 
     } 
    }); 
    }); 

Посмотреть

Просто нг-повтор, чтобы показать данные

ответ

0
  • this.arrName не существует, потому что не создал локальный var arrName, вы добавили поле arrName в $scope, который является отдельным объектом вашего контроллера.
  • Что касается вашего рендеринга, вы просто попробовали без $apply? Ваш ng-repeat должен обнаружить любые изменения в массиве поддержки и соответственно обновить их.
+0

ли то же самое. Если я пишу var arrName = [], прежде чем устанавливать его в this.arrName, ничего не изменится. И я не знаю, почему модель не отслеживает arrName, мне нужно вручную использовать $ scope. $ Apply to push изменения в представлении. – wOvalle

0

Я обычно проходит обратный вызов $apply ...

$scope.$apply(function(){ 
    $scope.objects.push(data.Contents[i].Key); 
}); 
Смежные вопросы