2017-03-02 81 views
3

間隔函數在我單擊的最後一個元素中保持循環。我想要發生的是取消最後一次間隔,當我點擊一個新元素並重新開始時,我點擊它。我點擊ng-repeat中的每個項目。

這是我的代碼。

$scope.onClickTab= function(x,tkid, sid, $event){ 
     var vtpostdata = 'TokenId=' + tkid + 
           ',SessionId=' + sid + 
           ',ChatMessageCount=' + 0 + 
           ',retrytimes=' + 10 + 
           ',delayms=' + 100; 
    $interval(function() { 
     $http.jsonp(ServiceDomainSite + 'myApi' + vtpostdata + '?callback=JSON_CALLBACK&t=' 
            + new Date().getTime()) 
      .success(function (data) { 
       var resultObject = angular.fromJson(data.Rows); 
       $scope.Chats = resultObject;  
      }); 
    }, 1000); 
}; 

回答

3

不錯,並與$interval.cancel()罰款。我還刪除了var vtpostdata,因爲它沒有在代碼中使用,直到您的$http請求再次出現。所以在這一點上不需要創建一個var。另請參閱AngularJS $interval的文檔以瞭解更多關於$間隔處理的信息。

var myInterval = null; 

$scope.onClickTab = function(x,tkid, sid, $event){ 

    //cancel current interval 
    if (myInterval !== null) { 
     $interval.cancel(myInterval); 
    } 

    myInterval = $interval(function() { 
     $http.jsonp(ServiceDomainSite + 'myApiTokenId=' + tkid + 
     ',SessionId=' + sid + 
     ',ChatMessageCount=' + 0 + 
     ',retrytimes=' + 10 + 
     ',delayms=' + 100 + '?callback=JSON_CALLBACK&t=' 
     + new Date().getTime()).success(function (data) { 
      var resultObject = angular.fromJson(data.Rows); 
      $scope.Chats = resultObject; 
     }); 
    }, 1000); 
}; 
+0

謝謝你這對我的作品!上帝保佑男人。 –

+0

@JohnWick很高興幫助你。祝你今天愉快。 – lin

0

$interval服務返回一個可以隨時被取消,所以你可以使用它們按照官方文件的承諾。例如。

var stopTime = $interval(function(){}, 1000); 

以及取消只使用

$interval.cancel(stopTime); 

https://docs.angularjs.org/api/ng/service/ $間隔