更新
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() {
// scrollTimeout will store the unique ID for the $setInterval instance
return $scope.scrollTimeout = timeFunctions.$setInterval(scroll, 5000, $scope);
// Function called on interval with scope available
function scroll($scope) {
console.log('scroll', $scope);
$scope.currentPage++;
}
},
$scope.stopFeature = function() {
return timeFunctions.$clearInterval( $scope.scrollTimeout );
}
}
]);