为什么不从 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