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

を使用打ち消すための!神は人を祝福します。 –

+0

@JohnWickはよかったです。良い一日を。 – lin

0

$intervalサービスは、公式ドキュメントごとにそれらを使用することができますので、いつでもキャンセルすることができます約束を返します。例えば

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

とちょうどこれが私の作品をありがとう

$interval.cancel(stopTime); 

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

関連する問題