Angular: Empty Fiddle

http://angularjs.org/

HTML

<script src="http://code.angularjs.org/angular-1.0.1.js"></script>
<div ng-controller="MyCtrl">
   <br>
   <form name="msgForm">
      <input type="text" ng-model="msg" ng-disabled="disableButton" ng-required="true"><br>
   <button class="button button-small" ng-click="onTimeout()" ng-disabled="msgForm.$invalid || disableButton">Enviar</button>
   </form>
</div>

JavaScript

var myApp = angular.module('myApp',[]);

function MyCtrl($scope, $timeout) {
    $scope.disableButton = false;
    $scope.counter = 0;
    
    //Simula uma requisição
    $scope.onTimeout = function() {
        //Assim que entrar na função seta como true
        $scope.disableButton = true;
        $scope.counter++;
        mytimeout = $timeout($scope.onTimeout, 1000);
        //Após o fim da simulaçã
        if ($scope.counter >= 5) {
            $timeout.cancel(mytimeout);
            //Depois de terminar a requisição seta como false
            $scope.disableButton = false;
            $scope.counter = 0;

        }
    }
}