`$scope.$apply` is the key here to getting the press of `esc` to respond right away. I assumed that because it was detected by an angular service, `$document`, that it would start a digest. Reading the angular docs revealed that `$document` just delegates to jQlite/jQuery (jQuery in our case). Since the keypress is being detected by jQuery, we have to manually tell angular to run a digest so that this gets updated immediately, instead of waiting for the next digest cycle to be picked up.