2017-03-02 79 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/ $间隔