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 */