If I've understood your question correctly, you just need to pass 'true' as the third parameter (objectEquality) in your calls to $watch [1] - this will ensure that calls to $digest use angular.equals [2].
If I've understood your question correctly, you just need to pass 'true' as the third parameter (objectEquality) in your calls to $watch [1] - this will ensure that calls to $digest use angular.equals [2].I know, but this is actually set up by Angular itself, when setting up bindings for directives with scope: { foo: '=' }. So I have no chance of fixing this.