$rootScope
существует, но его можно использовать во зло
Области в Angular образуют иерархию, прототипически наследуемую от корневой области в верхней части дерева. Обычно это можно игнорировать, поскольку большинство представлений имеют собственный контроллер и, следовательно, область действия.
Иногда есть части данных, которые вы хотите сделать глобальными для всего приложения. Для них вы можете внедрить $rootScope
и установить для него значения, как и для любой другой области. Поскольку области наследуются от корневой области, эти значения будут доступны для выражений, прикрепленных к директивам, таким как ng-show, точно так же, как значения в вашем локальном $scope
.
Конечно, глобальное состояние — это отстой, и вы должны использовать $rootScope
экономно, как вы (надеюсь) использовали бы с глобальными переменными в любом языке. В частности, не используйте его для кода, только для данных. Если у вас возникает соблазн поместить функцию в $rootScope
, почти всегда лучше поместить ее в службу, которую можно внедрить туда, где она нужна, и которую легче протестировать.
И наоборот, не создавайте службу, единственной целью которой является хранение и возврат битов данных.