Я новичок в angular js, и я использую $scope в своем кодировании. Однако я понял, что область действия должна использоваться для глобальных переменных, чтобы убедиться, что я искал документы angularJs, но затем нашел детали корневой области, которые мне непонятны. Кто-нибудь помогает мне понять основную разницу между корневой областью и областью? Когда использовать.? И как внутренне это работает.?
В чем основное различие между rootScope и областью видимости в angularJs. Как это работает внутри
Ответы (2)
Области имеют иерархию.
Каждое приложение Angular имеет ровно одну корневую область, но может иметь несколько дочерних областей.
Приложение может иметь несколько областей действия, поскольку некоторые директивы создают новые дочерние области (см. документацию по директивам, чтобы узнать, какие директивы создают новые области). Когда создаются новые области, они добавляются как дочерние области своей родительской области. Это создает древовидную структуру, которая параллельна DOM, к которому они прикреплены.
Когда у вас есть что-то вроде:
{{name}}
Он будет искать в области действия этого свойства. Если такое свойство не найдено, выполняется поиск в родительской области и так далее, пока не будет достигнута корневая область. В JavaScript такое поведение известно как прототипное наследование, и дочерние области прототипически наследуются от своих родителей.
Если вы посмотрите на рисунок ниже, в самой внутренней области {{name}} разрешается свойство в ng-repeat. В области GreetCtrl он разрешается в свойство, определенное в этом контроллере. Если этот контроллер не определил свойство и оно было определено в $rootScope, будет показано значение $rootScope.
Итак, $rootScope — это корневая, глобальная или самая верхняя родительская область. :
Каждое приложение имеет одну корневую область. Все остальные области являются дочерними областями корневой области. Области обеспечивают разделение между моделью и представлением с помощью механизма наблюдения за изменениями модели.
Информацию о том, как работает область, см. в документах.
$scope не является глобальной переменной, она используется в конкретном модуле и доступна через контроллер, тогда как $rootscope похожа на глобальные переменные между модулями, и, кроме того, у нас может быть несколько $scope, но у нас может быть только один $rootscope внутри нашего приложения, т.е. $ rootscope используется для переменных globla, а $scope используется для локальной переменной внутри модуля.