Когда нормально хранить объект на $rootScope в AngularJS

Я вижу много учебников по аутентификации, которые помещают объект auth в $rootScope, включая AngularFire-seed от людей FireBase.

Я думал, что плохая практика заключается в том, чтобы поместить объекты в корневую область, и вместо этого лучше создать службу. Почему это (видимо) нормально, когда дело доходит до аутентификации? Вернее, более общий вопрос: когда это нормально и, возможно, даже хорошая практика, чтобы что-то положить на корнеплод?

Чтобы привести другой пример. У меня есть профиль-объект для пользователя. Можно ли также добавить это в auth-объект? Я даже не загрязняю корнеплод в этом случае, поскольку auth-объект уже существует. Можно ли поместить профиль на корнеплод как это (через auth-объект)? Если нет, то почему?

Я знаю, это было несколько вопросов, но все они сводятся к одному в заголовке в заголовке...

Ответ 1

Скорее всего, из-за того, как прототипическое наследование работает в JavaScript.

Например: клиенту потребуются авторизированные учетные данные во всем приложении, что лучше, чем $rootScope? (за исключением случаев, когда вы хотите использовать его в службе и вводите эту службу по всем артефактам). Это работает как ASPECT для решения сквозных функций переноса данных auth. Добавляя данные, связанные с auth, в $rootScope, вы можете легко получить подробную информацию о любом из scope, который, по-видимому, наследуется от $rootScope (из-за прототипического наследования).

Это справедливо для директив не с изолированной областью, но для изолированного объема также стена для поднятия будет мала, так как вы получаете эффективный механизм двусторонней привязки.