['$scope', function($scope) { var debounce = function(cb) { var timeout = null; return function(data) { if (timeout) { clearTimeout(timeout); } timeout = setTimeout(function() { cb(data); }, 200); }; }; $scope.$watch('submission.data', debounce(function(data) { // Put your logic here.... })); });