angularJS:如何使用setTimeout?

时间:2015-01-09 17:31:38

标签: javascript angularjs

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?

3 个答案:

答案 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); });
}

希望这会对你有所帮助。