Thanks for looking into this. Using $timeout certainly works in
this case, that is good to know. I used setTimeout in this example,
at other times I might have the same issue interacting with a 3rd
party asynchronous operation that isn't wrapped in AngularJS.
$scope.$apply seems to work in this case, but that feels awkward
because presumably the digest of the $scope broadcasting the event
will be done, rather than the $scope receiving the event.
It does work in jsfiddle though, so that is good. I wonder if
anyone can explain that?