Trick question I haven't found any answer in the documentation yet.

A change detection cycle is triggered when `AppRef.tick()` is beeing called (mostely by the NgZone patches). It goes from the root component at the top of the tree to the bottom passing by :

* every components with Default strategy
* every components marked by `markForCheck` (and their ancestors)

And skipping non-marked OnPush components.

But why, when a event is fired by a component, all its ancestors will also be checked ? As if `markForCheck` were called.

I was expecting the same behavior as when `AppRef.tick` is called. It doesn't make sense to me why OnPush parents are being checked. That behavior can well be seen on [this demo](https://danielwiehl.github.io/edu-angular-change-detection/).

Please also see a [working illustration on stackblitz](https://stackblitz.com/edit/angular-onpush-cd-parent?file=src%2Fapp%2Fapp.component.ts)