function performerController($scope, $http) {
this.getPerformerOnline = function (performerid) {
setTimeout(this.getPerformerOnline, 3000, performerid);
$http.get("ajax.php", {
params:{
"action":"getPerformerOnline", "performerid":performerid
}
}).success(function(data) {
console.log(data);
$scope.performer = data;
});
};
this.getPerformerOnline(<?=$user->id?>);
}
此功能仅限TWICE:console.log(data);显示2次结果。
如何每3000ms调用一次getPerformerOnline?
答案 0 :(得分:4)
您需要$interval
而不是超时,同时避免在角度使用setTimeout
,而是使用角度$timeout
服务......
function performerController($scope, $http, $interval) {
this.getPerformerOnline = function (performerid) {
$interval(this.getPerformerOnline, 3000, performerid);
$http.get("ajax.php", {
params:{
"action":"getPerformerOnline", "performerid":performerid
}
}).success(function(data) {
console.log(data);
$scope.performer = data;
});
};
this.getPerformerOnline(<?=$user->id?>);
}
答案 1 :(得分:1)
不要在功能本身设置超时。而是定义您的功能,然后使用$interval
服务重复调用它。
function performerController($scope, $http, $interval) {
this.getPerformerOnline = function (performerid) {
$http.get("ajax.php", {
params:{
"action":"getPerformerOnline", "performerid":performerid
}
}).success(function(data) {
console.log(data);
$scope.performer = data;
});
};
$interval(this.getPerformerOnline, 3000, performerid);
}
答案 2 :(得分:0)
您可以使用$ interval。 使用$ interval服务的优点是,它在内部调用$ digest循环。
function MainController($scope, $interval) {
$scope.intervalFunction = function(){
//your code goes here
}
var intervalPromise = $interval(function () { $scope.intervalFunction() }, 5000);
//best practice destroying the $interval on scope destroy
$scope.$on('$destroy', function () { $interval.cancel(intervalPromise); });
}
希望这会对你有所帮助。