Update 
Angular has implemented an $interval feature in version 1.2 - http://docs.angularjs.org/api/ng.$interval
Legacy example below, disregard unless you're using a version older than 1.2.
A setInterval implementation in Angular - 
I've created a factory called timeFunctions, which exposes $setInterval and $clearInterval.
Note that any time I've needed to modify scope in a factory I've passed it in. I am unsure if this meets the "Angular way" of doing things, but it works well.
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 ] );
      }
    }
  }
]);
Example Usage:
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 );
    }
  }
]);