2015-05-22 41 views
1

我有一个select2下拉列表绑定到我的作用域($ scope.makes)中的数据。 它是一个ng-mode内的“生活”。

我更新$ 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部分是相关

<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)也更新它的范围。

Angular只会解释那些在AngularJS的上下文中完成的模型更改,它不知道回调并且不能自行更新,因为如果更改是在其范围内的话。

有关如何告知Angular更新其范围的更多信息,请使用$digest()$apply()read this article或此问题$apply vs $digest in directive testing

相关问题