为什么不从 Parse 回调中自动调用 $digest()?
Why does $digest() is not being called automatically from Parse callback?
我有一个 select2 下拉列表,它绑定到我的范围内的数据 ($scope.makes)。
它在 ng-modal 中 "living"。
我在承诺中更新了 $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>
那是因为 success
超出了 Angular 的范围,你需要 明确地 告诉 Angular 某些东西必须更新运行 $digest
或 $apply
(内部调用 $digest
)也更新它的范围。
Angular 将仅考虑在 AngularJS 上下文中完成的那些模型更改,它不知道回调并且无法更新自身,就像在内部进行更改一样这是范围。
有关如何告诉 Angular 更新其范围的更多信息,请使用 $digest()
或 $apply()
read this article or this question $apply vs $digest in directive testing。
我有一个 select2 下拉列表,它绑定到我的范围内的数据 ($scope.makes)。 它在 ng-modal 中 "living"。
我在承诺中更新了 $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>
那是因为 success
超出了 Angular 的范围,你需要 明确地 告诉 Angular 某些东西必须更新运行 $digest
或 $apply
(内部调用 $digest
)也更新它的范围。
Angular 将仅考虑在 AngularJS 上下文中完成的那些模型更改,它不知道回调并且无法更新自身,就像在内部进行更改一样这是范围。
有关如何告诉 Angular 更新其范围的更多信息,请使用 $digest()
或 $apply()
read this article or this question $apply vs $digest in directive testing。