To have a repeater with a large array that you do not look at every element.
You need to create a custom directive that takes one argument and an expression for your array, and then in the binding function that you just watch this array, and you will have a binding function that updates the HTML programmatically (rather than using ng-repeat)
something like (psuedo-code):
app.directive('leanRepeat', function() { return { restrict: 'E', scope: { 'data' : '=' }, link: function(scope, elem, attr) { scope.$watch('data', function(value) { elem.empty();
... which seems like a pain in the butt.
Alternative hacker method
You may be able to go through $scope.$$watchers and examine $scope.$$watchers[0].exp.exp to see if it matches the expression you want to delete, then delete it with a simple splice() call splice() . PITA here, is that tags, such as Blah {{whatever}} Blah between tags, will be an expression and will even include carriage returns.
At the top, you can just skip the $ n space of your ng-repeat and just delete everything and then explicitly add the clock you want ... I don't know.
In any case, this seems to be a hack.
To remove an observer from $ scope. $ watch
You can unregister $watch with the function returned by calling $watch :
For example, in order to fire only $watch fire once:
var unregister = $scope.$watch('whatever', function(){ alert('once!'); unregister(); });
You can, of course, call the unregistration function at any time ... it was just an example.
Conclusion: There really is no great way to do what you ask.
But one thing you might think: is it even worth the worry? Also, is it really a good idea to have thousands of records loaded into dozens of DOMElements each? Food for thought.
I hope this helps.
EDIT 2 (bad idea removed)