When should I use angular
They are not the same, clearly. One is used solely in the controller; the other is a directive on an input element.
But even in their application they differ.
When you use
$watch the watched expression will be evaluated on every digest cycle, and if there is a change, the handler is invoked.
ng-change, the handler is invoked explicitly in response to an event.
$watch, change can come from anywhere: user action, controller function, service - all will trigger the handler.
ng-change, the change is restricted to a user action on a particular input element.
It is worth to note also that
ng-change works only in combination with
ng-model - in other words, the
ng-change expression is evaluated only when
ngModel.$viewValue (refer to
ngModelController documentation for more info) is changed, which typically happens in response to a user-initiated event.