1

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

1 回答 1

1

那是因为success超出了 Angular 的范围,您需要明确告诉 Angular 某些内容已更新,它必须运行$digest$apply(内部调用$digest)也更新它的范围。

Angular 将仅考虑在 AngularJS 上下文中完成的模型更改,它不知道回调并且无法更新自身,就像更改在其范围内一样。

有关如何告诉 Angular 更新其范围的更多信息,请阅读$digest()$apply() 阅读本文或此问题$apply vs $digest in directive testing

于 2015-05-22T08:26:00.907 回答