更新
Angular在1.2版本中实现了一个$interval特性 - http://docs.angularjs.org/api/ng.$interval
以下是旧版示例,除非您使用的版本早于1.2,否则请忽略。
Angular中的setInterval实现 -
我创建了一个名为timeFunctions的工厂,其中包含$setInterval和$clearInterval。
请注意,每当我需要在工厂中修改作用域时,我都会将其传递进去。我不确定这是否符合“Angular方式”,但它运行良好。
app.factory('timeFunctions', [
"$timeout",
function timeFunctions($timeout) {
var _intervals = {}, _intervalUID = 1;
return {
$setInterval: function(operation, interval, $scope) {
var _internalId = _intervalUID++;
_intervals[ _internalId ] = $timeout(function intervalOperation(){
operation( $scope || undefined );
_intervals[ _internalId ] = $timeout(intervalOperation, interval);
}, interval);
return _internalId;
},
$clearInterval: function(id) {
return $timeout.cancel( _intervals[ id ] );
}
}
}
]);
使用示例:
app.controller('myController', [
'$scope', 'timeFunctions',
function myController($scope, timeFunctions) {
$scope.startFeature = function() {
return $scope.scrollTimeout = timeFunctions.$setInterval(scroll, 5000, $scope);
function scroll($scope) {
console.log('scroll', $scope);
$scope.currentPage++;
}
},
$scope.stopFeature = function() {
return timeFunctions.$clearInterval( $scope.scrollTimeout );
}
}
]);