2015-05-22 3 views
1

У меня есть выпадающий список select2, привязанный к данным в моей области ($ scope.makes). Это «живое» внутри ng-модальное.

Я обновляю $ scope.makes внутри обещания, которое является вызовом Parse.com (parse.cloud.run), но после этого он находится над DDL, который не связан с новыми данными. Но если я добавлю вызов $ scope. $ Digest(), он работает. Почему?

Это относится часть модального контроллер:

Parse.Cloud.run('getCarMakes', {}, { 
     success: function (results) { 
      console.log('C'); 
      if (results===undefined){ 
       console.log('The query has failed'); 
       return; 
      } 
      for (var i=0;i<results.length;i++){ 
       $scope.makes.push(results[i]); 
      } 
      $scope.$digest(); 

Если я удалить последнюю строку - выпадающий список не обновляются.

Вот HTML часть Modal, которая имеет отношение

<label class="control-label" for="MakeSelect">Make </label> 
<select class="form-control col-md-2" id="MakeSelect" name="make" ui-select2 ng-model="carDetails.make"> 
    <option ng-repeat="make in makes" value="{{ make }}">{{ make}}</option> 
</select> 

ответ

1

Это потому, что success выходит за рамки угловых, вы должны явно сказать Угловое, что что-то было обновлено он должен работать $digest или $apply (который внутренне вызывает $digest), чтобы обновить его область.

Угловой будет учитывать только те изменения модели, которые выполняются внутри контекста AngularJS, он не имеет понятия о обратном вызове и не может обновить себя, как если бы изменения были внутри его области.

Для получения дополнительной информации о том, как вы должны сказать Угловыми обновить это сфера, с $digest() или $apply()read this article или этим вопросом $apply vs $digest in directive testing.

Смежные вопросы