Changes are only detected when the databound input property is changed via a template's binding. If the changes are done manually to a property on a component class, the change is not detected.
References:
https://medium.com/@isaacplmann/ngonchanges-only-runs-when-the-input-change-comes-from-a-template-binding-like-component-8797b759ba0b