IMHO, [(ngModel)]="foo" (ngModelChange)="onFooChange($event)"
is an Angular cousin of the (in)famous a[i] = i++
mistake in C.
Things are a bit different in Angular-land than they were in C-land back then, because there is really only one reference Angular implementation, so the holy grail of portability that was so crucial to C programmers is no longer as holy, but I still think it’s super-important not to depend on arbitrary unguaranteed aspects of framework internals, and the order of execution of multiple event bindings is one of those things in my book.
So the way I would state the rule is that if you are going to have multiple banana bindings on an element (even implicit ones), they must operate correctly regardless of the order in which they are called. onFooChange
in the above example cannot rely on this.foo
. Especially considering readability and maintainability, I would strongly encourage simply limiting oneself to one event binding.