angularJS:如何使用 setTimeout

angularJS: how to use setTimeout?

本文关键字:setTimeout 何使用 angularJS      更新时间:2023-09-26
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 次结果。

如何每 3000 毫秒调用 getPerformer在线?

你需要

一个$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?>);    
}

不要在功能本身中设置超时。而是定义函数,然后使用 $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);
}
您可以使用

$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); });
}

希望这对您有所帮助。