webentwicklung-frage-antwort-db.com.de

Wie kann ich das Zeitintervall in anglejs löschen oder stoppen?

Ich mache eine Demo, in der ich Daten in regelmäßigen Abständen mithilfe von $interval vom Server abrufe.

Wie kann ich das erreichen? Wenn ich den Prozess erneut starten muss, wie soll ich das tun?

Zweitens, ich habe noch eine Frage: Ich hole nach erforderlichen Zeitintervallen Daten vom Server ab. Gibt es eine Notwendigkeit, $scope.apply oder $scope.watch zu verwenden? 

Hier ist mein Plunker:

  app.controller('departureContrl',function($scope,test, $interval){
   setData();

   $interval(setData, 1000*30);

   function setData(){
      $scope.loading=true;
    test.stationDashBoard(function(data){
        console.log(data);
        $scope.data=data.data;
        $scope.loading=false;
        //alert(data);
    },function(error){
        alert('error')
    }) ;

   }
});

http://plnkr.co/edit/ly43m5?p=preview

90
user944513

Sie können das von dem Intervall zurückgegebene Versprechen speichern und $interval.cancel() für dieses Versprechen verwenden, wodurch das Intervall dieses Versprechens aufgehoben wird. Um das Starten und Stoppen des Intervalls zu delegieren, können Sie die Funktionen start() und stop() erstellen, wenn Sie sie von einem bestimmten Ereignis aus stoppen und erneut starten möchten. Im Folgenden habe ich ein Snippet erstellt, das die Grundlagen zum Starten und Stoppen eines Intervalls zeigt, indem es durch die Verwendung von Ereignissen (z. B. ng-click) und im Controller implementiert wird.

angular.module('app', [])

  .controller('ItemController', function($scope, $interval) {
  
    // store the interval promise in this variable
    var promise;
  
    // simulated items array
    $scope.items = [];
    
    // starts the interval
    $scope.start = function() {
      // stops any running interval to avoid two intervals running at the same time
      $scope.stop(); 
      
      // store the interval promise
      promise = $interval(setRandomizedCollection, 1000);
    };
  
    // stops the interval
    $scope.stop = function() {
      $interval.cancel(promise);
    };
  
    // starting the interval by default
    $scope.start();
 
    // stops the interval when the scope is destroyed,
    // this usually happens when a route is changed and 
    // the ItemsController $scope gets destroyed. The
    // destruction of the ItemsController scope does not
    // guarantee the stopping of any intervals, you must
    // be responsible for stopping it when the scope is
    // is destroyed.
    $scope.$on('$destroy', function() {
      $scope.stop();
    });
            
    function setRandomizedCollection() {
      // items to randomize 1 - 11
      var randomItems = parseInt(Math.random() * 10 + 1); 
        
      // empties the items array
      $scope.items.length = 0; 
      
      // loop through random N times
      while(randomItems--) {
        
        // Push random number from 1 - 10000 to $scope.items
        $scope.items.Push(parseInt(Math.random() * 10000 + 1)); 
      }
    }
  
  });
<div ng-app="app" ng-controller="ItemController">
  
  <!-- Event trigger to start the interval -->
  <button type="button" ng-click="start()">Start Interval</button>
  
  <!-- Event trigger to stop the interval -->
  <button type="button" ng-click="stop()">Stop Interval</button>
  
  <!-- display all the random items -->
  <ul>
    <li ng-repeat="item in items track by $index" ng-bind="item"></li>
  </ul>
  <!-- end of display -->
</div>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

142
ryeballar
var interval = $interval(function() {
  console.log('say hello');
}, 1000);

$interval.cancel(interval);
35
Arun Sharma
var promise = $interval(function(){
    if($location.path() == '/landing'){
        $rootScope.$emit('testData',"test");
        $interval.cancel(promise);
    }
},2000);
9
Jijo Paulose
    $scope.toggleRightDelayed = function(){
        var myInterval = $interval(function(){
            $scope.toggleRight();
        },1000,1)
        .then(function(){
            $interval.cancel(myInterval);
        });
    };
1

Wenn Sie Intervallspeicherversprechen für Variable erstellen möchten:

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

Und wenn Sie das Intervall stoppen/löschen möchten, verwenden Sie einfach:

$interval.cancel(p);
0
pixparker