在 AngularJS 项目中,我可以通过调用 $scope.loadEvent 来显示事件列表,但是在使用 $http 和 $timeout 轮询服务器时无法更新视图。我可以看到正在发出/接收正确的 $http 调用和响应。
控制器的精简版:
function EventsCtrl ($scope, $http, $timeout) {
$scope.myEvents = new Array();
var newMyEvents = new Array();
$scope.loadEvent = function(eventId) {
$http.get('http...').success(function(result) {
$scope.myEvents.push(result.data);
});
}
$scope.polling = function () {
var poller = function() {
newMyEvents = [];
for(var i=0; i< $scope.myEvents.length; i++) {
$http.get('http...').success(function(result) {
newMyEvents.push(result.data);
});
}
$timeout(poller, 2000);
}
$scope.myEvents = newMyEvents;
poller();
}
}
和观点:
<div ng-controller="EventsCtrl" ng-init="polling()">
我试过了$scope.$apply()
,它返回Error: $apply already in progress
,因为它似乎 $http 已经在“内部”Angular。
任何和所有的想法表示赞赏。谢谢。