Как правильно отслеживать изменение данных в сервисе?
https://github.com/rubenv/angular-tiny-eventemitter
В сервисах создавайте методы типа onUserChanged, которые принимают коллбэк и подписывают его на событие. 
В контроллерах делайте что-то типа Auth.onUserChanged(function(newUser) {
  vm.user = newUser;
});
Можно использовать eventemitter, либо pubsub
Директива по идее не должна напрямую ходить в сервис, контроллер должен ходить в сервис и прокидывать в директиву (хотя есть исключения)