How about we wrap `listener` in an apply block here:

```
element.on(options.updateOn, scope.$apply(listener));
```

Then if we have guaranteed in the `$broadcast` that `$flushPendingInput` is in a digest then we can remove all checks in the actual `listener` functions for `$$phase`.