我有一个select2下拉列表,它绑定到我的作用域中的数据($ scope.makes)。 它“生活”在ng-modal中。
我在promise中更新$ 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();
如果我删除最后一行 - 下拉列表没有刷新。
这是相关的Modal的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>
答案 0 :(得分:1)
那是因为Dataset.Tables[0].Columns.Add(B);
超出了Angular的范围,您需要明确告诉Angular某些内容已更新,必须运行success
或$digest
(内部调用$apply
)来更新它的范围。
Angular将仅考虑在AngularJS上下文中完成的那些模型更改,它不知道回调并且无法更新自身,因为如果更改是在其范围内的话。
有关如何通过$digest
或$digest()
read this article或此问题$apply vs $digest in directive testing告诉Angular更新其范围的更多信息。