angular.module('plunker', [])

.config(function($provide) {
  $provide.decorator('ngClickDirective', function($delegate, $parse, $q) {
    $delegate[0].compile = function($element, attr) {
      var fn = $parse(attr.ngClick, null, true);
      
      return function(scope, element) {
        element.on('click', function(event) {
          var result, promise, d;
          if (element[0].disabled) return;
          result = fn(scope, {$event: event});
          if (result != null && typeof result.then === 'function') {
            promise = result;
          } else {
            d = $q.defer();
            d.resolve();
            promise = d.promise;
          }
          element[0].disabled = true;
          function enable() {
            element[0].disabled = false;
          }
          promise.then(enable, enable);
        });
      };
    };
    return $delegate;
  });
})

.controller('MainCtrl', function($scope, $timeout) {
  $scope.wait = function() {
    return $timeout(function() {}, 1000);
  };
});
<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.13/angular.js" data-semver="1.3.13"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <button ng-click="wait()">click me!</button>
  </body>

</html>
/* Put your css in here */