2015-05-22 66 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

相關問題