I would like to do an equivalent of ng-change for the entire form whenever there is a change in one of its input fields.
I know that since AngularJS 1.3
one "hacky" way to do this is by setting a watcher to the form dirty, valid depending on your requirements you can do something like
$scope.$watch('form.$dirty',function(v){
if(!v){return}
form.$setPristine()
/*do something here*/
})
this will execute everytime the form gets modified, if you only want to execute your code on valid modified form you can do
if(!v || form.$invalid){return}
and if you only want to execute your code when the form steps to $valid state just need to set up your watcher for 'form.$valid'
if you don't like to pollute your scope with watchers, you can always create a directive around the form that exposes a on-change api event and internally takes care of the watcher