アップデート
Angularはバージョン1.2で$interval機能を実装しました-http://docs.angularjs.org/api/ng.$interval
以下のレガシーの例では、1.2より古いバージョンを使用している場合を除いて無視してください。
AngularでのsetIntervalの実装-
$setIntervalと$clearIntervalを公開するtimeFunctionsというファクトリを作成しました。
ファクトリでスコープを変更する必要があるときはいつでも、それを渡したことに注意してください。これが物事の「角度のある方法」に適合するかどうかはわかりませんが、うまく機能します。
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 );
}
}
]);