 <p>I didn't like any of the provided answers as they all clutter the global scope with the <code>isDisabled</code> variable, why not do it this way instead?</p> <pre><code>&lt;button type="submit" ng-click="disableButton($event)"&gt;Submit&lt;/button&gt; </code></pre> <p>.</p> <pre><code>$scope.disableButton = function($event) { $event.currentTarget.disabled = true; }; </code></pre> <hr> <p>if if you need to submit a form before the disable. </p> <p><strong>this code is not tested</strong></p> <pre><code>&lt;form ng-submit="disableFormSubmitButton($event)"&gt; &lt;button type="submit"&gt;Submit&lt;/button&gt; &lt;/form&gt; </code></pre> <p>.</p> <pre><code>$scope.disableFormSubmitButton = function($event) { $($event).find('[type=submit]').prop('disabled',true); }; </code></pre>