Как рекомендовал Angular team (и несколько цифр blogs), я стараюсь избегать использования $rootScope
, насколько это возможно в моих приложениях.
$rootScope
существует, но он может быть использован для зла«Конечно, глобальное состояние отстой, и вы должны использовать
$rootScope
экономно, , как вы бы (надеюсь) использовать глобальные переменные в любом языке В частности, не используйте его для кода, только данные. Если у вас есть соблазн , поместите функцию на$rootScope
, почти всегда лучше поместить ее в службу , которую можно вставить туда, где это необходимо, и многое другое легко проверено. " - от Angular FAQ
Но в одном из моих приложений, я использую несколько раз такие события, как $routeChangeStart
, которые широковещательные события с помощью $rootScope
:
/* Force redirection to home page when a connected user calls login page */
$rootScope.$on("$routeChangeStart", function(event, next, current) {
if(next.$$route.originalPath == '/login' && Session.isUserConnected()) {
$location.path("/home");
}
}
Я не вижу способ избегайте $rootScope
в этих случаях.
- Есть ли более элегантный способ делать подобные трюки?
- Является ли это ошибкой дизайна моего приложения, чтобы использовать его?
- Должен ли я смириться с тем, чтобы использовать его, когда это абсолютно необходимо?
Скажите мне, если вы хотите, чтобы я предоставить больше примеров кода.
Вы читали это «глобальное состояние отстойно, и вы должны использовать $ rootScope экономно» ??? –
@RameshRajendran Да, из [первой ссылки] (https://docs.angularjs.org/misc/faq) я предоставил (последний абзац). Это из ** Угловой документации FAQ **. – Mistalis
для этого случая вы просто слушаете событие, транслируемое в $ rootScope, я думаю, что это допустимый прецедент. – Icycool