目前我正在使用角度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
页面中运行该计时器。如果我转到另一页,那么计时器应该停止。我们怎样才能实现它?
答案 0 :(得分:16)
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