选择下拉列表在更改数组值时不会立即更新

时间:2015-08-18 06:19:04

标签: javascript jquery angularjs

我有一个选择下拉列表,从数组中获取数据。该数组由服务器响应填充:

myApp.controller('mController', function($scope, $routeParams, $http, contextRoot) {

    var dataObject = {}
    $scope.arr = []

    $.post(contextRoot + "/servlet", dataObject, function(dataStr) {

        var dataFromServer = $.parseJSON(dataStr);
        console.log(dataFromServer);

        if (dataFromServer["success"] == 1) {
            $scope.arr = dataFromServer["list"]
        } else {
            alert("Failure! " + dataFromServer["message"])
        }
    });

});

dataFromServer["list"]的样本值为:

["    _alerts", "    Test2ControlDesk", "    aug15test", "    sample2", "    samplerolDesk"]

问题是,在收到回复后,下拉列表不会立即填充,并且需要一些时间。

html代码如下:

<select class="form-control" ng-model="selectedDataSource" ng-options="item as item for item in arr | orderBy:'toString()' " ></select>

1 个答案:

答案 0 :(得分:1)

似乎是您使用jquery $.post从服务器获取数据,以及它在角度知识之外的东西,因此您必须强制角度在外部过程之后更新范围,

在ajax成功之后使用$scope.$apply();,例如,

$.post(contextRoot + "/servlet", dataObject, function(dataStr) {

  var dataFromServer = $.parseJSON(dataStr);
  console.log(dataFromServer);

  if (dataFromServer["success"] == 1) {

    $scope.arr = dataFromServer["list"];

    $scope.$apply(); // new line

  } else {

    alert("Failure! " + dataFromServer["message"])

  }
});

这是关于$apply()

的好article

BESTWAY

使用angular builtin $http服务