我有一个选择下拉列表,从数组中获取数据。该数组由服务器响应填充:
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>
答案 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()
或 BESTWAY
使用angular builtin $http
服务