The underscore library provides a debounce function that prevents multiple calls to a function within a set period of time. Their version makes use of setTimeout.
There is a good implementation of both a debounce service and directive that can work with any ng-model at: https://github.com/shahata/angular-debounce