Для этого лучше использовать события. Они сработают моментально, не завязаны на $digest циклах и т.д. Лепить для этого добра байндинги неоправданно большой оверхэд. Вообще если речь идет о уведомлении о изменении состояния глобально, то лучше просто в $rootScope эмитить событие которое будет распространяться вниз по всем дочерним.
p.s. почему вы не пользуетесь промисами? вместо
myService.auth(data, function () {
    alert('success');
});
можно делать так:
myService.auth(data).then(function () {
});
при этом у вас появляется масса возможностей. Можно вклиниваться в цепочки промисов, можно ждать пока не завершится несколько паралельных запросов. Можно посредством цепочки промисов видоизменять данные:
myService.auth().then(function (userId) {
    return user.get(userId);
}).then(function (user) {
    // тут можно чего с пользователем поделать
    return user.friends;
}).then(function (friends) {
   if( !friends.length) {
        return $q.reject('У вас 0 друзей :(');
   }
   return $q.all(friends.map(function (user) {
        profile.get(user.id);
   });
}).then(function (friendsProfiles) {
    $scope.friends = friendsProfiles;
}, function (error) {
     alert(error);
});
надеюсь понятно обрисовал возможности. Сервис $http и почти все сервисы в ангуляре возвращают промисы. Забудьте о тупых колбэках.