2017-03-02 5 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()과 함께 사용하면 좋습니다. $http 요청이 다시 전송 될 때까지 코드에서 사용되지 않았기 때문에 var vtpostdata도 삭제했습니다. 따라서이 시점에서 var를 작성할 필요가 없습니다. 또한 $ interval 처리에 대한 자세한 내용은 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

이 나를 위해 작동 해 주셔서 감사합니다

$interval.cancel(stopTime); 

https://docs.angularjs.org/api/ng/service/ $ 간격을 사용! 신의 축복. –

+0

@JohnWick 도움이되어 기쁩니다. 좋은 하루 되세요. – lin

0

$interval 서비스는 언제든지 취소 할 수있는 약속을 반환하므로 공식 문서로 사용할 수 있습니다. 예를 들면.

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

및 취소에 대한