interval函数在我单击的最后一个元素中继续循环。我想要发生的是当我点击一个新元素时取消最后一个间隔,然后当我点击它时重新开始。我点击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);
};
答案 0 :(得分:3)
$interval.cancel()
很好很好。我还删除了var vtpostdata
,因为它未在代码中使用,而是再次发出$http
请求。因此,此时无需创建var。另请查看AngularJS $interval的文档以了解有关$ 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);
};
答案 1 :(得分:1)
$interval
服务返回一个可以随时取消的承诺,以便您可以按照官方文档使用它们。对于Eg。
var stopTime = $interval(function(){}, 1000);
并取消使用
$interval.cancel(stopTime);