2017-01-08 9 views
4

У меня проблема, когда ng-repeat не обновляет список при изменении массива.AngularJS ng-repeat не обновляется при обновлении массива

Я использую обещание JavaScript вычислить вычисление, чтобы затем вернуть объект, содержащий 2 массива. Эти массивы затем должны отображаться в представлении ниже фрагмента кода.

<button class="btn" data-toggle="modal" data-target="#tableModal" ng-click="vm.compareTables(vm.table)">Some text</button> 
<!-- Modal --> 
<div class="modal fade" id="tableModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 
    <div class="modal-dialog" role="document"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
       <h4 class="modal-title" id="myModalLabel">{{ vm.table.title}}</h4> 
      </div> 
      <div class="modal-body"> 
       <h4>You got</h4> 
       <p ng-repeat="g in vm.got">{{ g }}</p> 
       <h4>You dont:</h4> 
       <p ng-repeat="d in vm.dont">{{ d }}</p> 
      </div> 
     </div> 
    </div> 
</div> 

В контроллере я оберточную функцию в обещание, и он возвращает правильный ответ с 2 заполненных массивов. Я также могу распечатать результат в контроллере, ng-repeat просто не обновляет представление.

var vm = this; 

vm.compareTables = function (table) { 
    getData().then(function succesCallback(response) { 
     vm.ing = response.data; 
     var r = table; 
     var promise = pro(r, vm.ing); 
     promise.then(function (data) { 
      console.log(data.got); 
      console.log(data); 
      vm.got = data.got; 
      vm.dont = data.dont; 
     }); 
    }); 
} 

Вышеуказанное обещание возвращает правильный результат.

Я использую угловой 1.6.1, если это помогает. Контроллер и представление подключены к компоненту, который работает нормально.

UPDATE

Вот выход консоли для посыла возврата Console output

+0

у вас ** консоль ** данные? вы получаете данные? –

+0

@AvneshShakya Да, я добавил изображение консольного вывода. Невозможно показать данные, но размер массива. – McBoman

+0

Что такое функция 'pro'? – tasseKATT

ответ

1

Оберните ваш vm.got = .. in a $scope.$apply(function() { ... }), чтобы заставить digest cycle. Угловой, вероятно, не известно о вашем обратном вызове, потому что вы, вероятно, используете другой механизм promise/callback, чем угловые нативные ($http, $q, $resource).

+0

Когда он обертывается в $ apply am, я получаю, что уже выполняется цикл дайджеста. – McBoman

+0

Вы уверены, что тот же контроллер в js и html? – Noppey

+0

использовать механизм нативного обещания/обратного вызова ($ http, $ q, $ resource) сделал трюк для меня. Спасибо. – GoldenAxe

0

использование

$timeout(function() { 
    vm.got = data.got; 
    vm.dont = data.dont; 
}) 
0

Я надеюсь, что это поможет вам. См. Эту ссылку, и если не ясно, посмотрите видео, указанное в конце этой ссылки. solve problem of ng-repeat

+0

Извините, но не работает – McBoman

0

Если вы вне контекстного контекста, вам нужно использовать $ scope. $ Apply() метод в режиме callback для обновления вашего представления.

+0

Это дает ошибку, что $ apply уже обрабатывает. – McBoman