为什么没有从Parse回调中自动调用$ digest()?

时间:2015-05-22 08:10:48

标签: angularjs ui-select2 angular-digest

我有一个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>

1 个答案:

答案 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更新其范围的更多信息。