在angularjs中导航期间停止时间间隔

时间:2013-12-05 05:43:17

标签: javascript angularjs setinterval

目前我正在使用角度js

我有一个get方法从default.html

中的服务器端获取数据
function bindActiveLoans() {
            $http.get(rootUrlSingleEscaped + '/cooperativa/allunfundedloans/?authId=' + userInfo.UserId)
                 .success(function (response) {
                     if (response.Loans.length == 0) {
                         $scope.IsValues = false;
                         $scope.$apply();
                         return true;
                     }
                     $scope.IsValues = true;
                     $scope.unfundedLoans = response;
                 });
        };

        setInterval(function () {
            $scope.$apply(bindActiveLoans());
        }, 5000);

上述功能有助于每5秒从服务器端方法获取数据。

在这里,我有一个问题。

另外我还有一些页面,比如

  • default2.html,default3.html,default4.html,default5.html。

      

    当我将default.html页面导航到default1.html页面时,计时器仍在运行。我想只在default.html页面中运行该计时器。如果我转到另一页,那么计时器应该停止。我们怎样才能实现它?

3 个答案:

答案 0 :(得分:16)

来自$interval API page

中的angularjs示例
    var interval = $interval(function() {
        console.log('say hello');
    }, 1000);

    $interval.cancel(interval);

使用$ interval.cancel(var)你可以停止间隔,如果你想在导航到另一个页面时停止它,你应该尝试这样的事情。

var interval = null;

module.controller('SomeController', '$interval', function($interval) {
    interval = $interval(function() {
        ...
    }, 2000);
}).run(['$rootScope', '$interval', function($rootScope, $interval) {
    $rootScope.$on('$routeChangeStart', function() {
        $interval.cancel(interval);
    });
}]);

答案 1 :(得分:1)

您可以收听$routeChangeStart事件,并根据路线参数清除间隔,

  $scope.$on('$routeChangeStart', function (scope, next, current) {
           if(<next is not default.aspx>){
           // clear interval here
            }
  });

答案 2 :(得分:-1)

从默认页面导航时调用clearInterval函数

e.g。

var myVar = setInterval(function () {
        $scope.$apply(bindActiveLoans());
    }, 5000);


function myStopFunction()
{
clearInterval(myVar);
} 

调用myStopFunction