Зачем мне использовать $ rootScope, если я могу использовать $ scope. $ Root?

Поскольку $scope.$root является ссылкой на $rootScope и, следовательно, то же самое, зачем мне вводить $rootScope, когда мне нужно его использовать, если у меня уже есть доступ к нему через $scope.$root? Каковы причины, будь то лучшие практики AngularJS или общие рекомендации по программированию, использования $rootScope вместо $scope.$root?

Для ясности, это не вопрос о том, когда использовать $rootScope. Спрашивается, почему я должен его использовать.


person ross_troha    schedule 12.07.2017    source источник
comment
Что такое $ root. $ Scope?   -  person Kyle Krzeski    schedule 12.07.2017
comment
@WilliamHampshire Спасибо, я отредактирую это ...   -  person ross_troha    schedule 12.07.2017
comment
дубликат stackoverflow.com/questions/22216441/   -  person Kyle Krzeski    schedule 12.07.2017
comment
На это уже был дан ответ: https://stackoverflow.com/questions/22216441/what-is-the-difference-between-scope-root-and-rootscope   -  person flyer    schedule 12.07.2017
comment
^ на это уже был дан ответ (опубликовал это за несколько секунд до того, как вы @flyer: P)   -  person Kyle Krzeski    schedule 12.07.2017
comment
Только вот это не дубликат, потому что я уже знаю разницу. Я спрашиваю, какова вообще цель использования $ rootScope . Зачем вводить что-то, если это уже доступно через $scope.$root   -  person ross_troha    schedule 12.07.2017


Ответы (3)


$ rootScope: var, который указывает на родительский элемент всех областей видимости и может быть внедрен везде. Все остальные области являются дочерними по отношению к $ rootScope. Они создаются с помощью метода $ new $ rootScope, поэтому каждая область наследуется от $ rootScope.

$ scope. $ root: содержит ссылку на $ rootScope.

Есть разница между использованием $ scope. $ Root и использованием $ rootScope:

Когда $ scope является корнем, его свойство $ root имеет значение null

$ scope. $ root назначается только изолированным областям действия. Таким образом, у вас может возникнуть ситуация, когда $ scope. $ root имеет значение null. Лучше вместо этого используйте $ rootScope ...

person Ankit Manchanda    schedule 12.07.2017
comment
Бит о том, что $root равен нулю, когда $scope равен $rootScope, неверен. github.com/angular/angular. js / blob / v1.5.11 / src / ng / - person ross_troha; 12.07.2017
comment
$ scope. $ root назначается только изолированным областям действия ... в противном случае наследуется прототипом. Невозможно, чтобы $ scope. $ Root мог быть нулевым в нормальных условиях. - person Estus Flask; 12.07.2017

Имеет смысл использовать $rootScope в вашем приложении. Как вы упомянули, $scope.$root - это просто ссылка на $rootScope из вашего текущего $scope. Если вы собираетесь ссылаться на корневую область видимости, вам следует ввести и использовать $rootScope, поскольку это явное объявление верхнего уровня $scope.

Однако в целом лучшие практики AngularJS обычно заставляют разработчика отказываться от использования $rootScope. Хотя удобно иметь глобальную область видимости, которую можно внедрить в любое место вашего приложения, обычно ею злоупотребляют и злоупотребляют, из-за чего на $rootScope объектах находится слишком много объектов, что может привести к снижению производительности в более крупных приложениях AngularJS.

Обычно, когда я думаю об использовании $rootScope для глобального хранения чего-либо, я останавливаюсь и на минуту думаю, какой подход может быть лучше. Возможно, лучшее решение могло бы включать внедрение общей службы / фабрики вместо того, чтобы полагаться на $rootScope.

person Ben Beck    schedule 12.07.2017

В какой-то степени это дело вкуса, поскольку это известный факт, что $rootScope === $scope.$root, хотя $rootScope немного более производительный и лучше минимизируется.

В современных приложениях AngularJS $scope мало используется. $scope не всегда доступен в контроллерах с синтаксисом controllerAs, включая контроллеры компонентов. $scope также недоступен в службах.

$rootScope обычно используется вместо $scope.$root, когда должна быть указана корневая область видимости, для согласованности.

person Estus Flask    schedule 12.07.2017