Я бы изменил хороший ответ Джоша, добавив, что, поскольку AuthService обычно интересует кого угодно (скажем, любой, кроме окна входа в систему, должен исчезнуть, если никто не вошел в систему), возможно, более простой альтернативой было бы уведомить заинтересованные стороны, используя $rootScope.$broadcast('loginStatusChanged', isLoggedIn);
(1 ) (2), в то время как заинтересованные стороны (например, контроллеры) будут слушать, используя $scope.$on('loginStatusChanged', function (event, isLoggedIn) { $scope.isLoggedIn = isLoggedIn; }
.
(1) $rootScope
вводится как аргумент службы
(2) Обратите внимание, что в вероятном случае асинхронной операции входа в систему вы захотите уведомить Angular о том, что трансляция изменит ситуацию, включив ее в $rootScope.$apply()
функцию.
Теперь, говоря о сохранении пользовательского контекста в каждом / многих контроллерах, вы, возможно, не будете довольны прослушиванием изменений входа в систему в каждом из них и, возможно, предпочтете прослушивать только в самом верхнем контроллере входа в систему, а затем добавите другие контроллеры входа в систему в качестве дочерних / встроенные контроллеры этого. Таким образом, дочерний контроллер сможет видеть унаследованные родительские свойства $ scope, такие как ваш пользовательский контекст.