Kapsamlar için resmi derinlemesine Açısal belgeleri okumanızı tavsiye ederim. 'Kapsam Hiyerarşileri' bölümünden başlayın:
https://docs.angularjs.org/guide/scope
Esasen, $ rootScope ve $ kapsam, DOM'un belirli kısımlarını tanımlar.
- Açısal işlemler gerçekleştirilir
- $ rootScope veya $ kapsamının bir parçası olarak bildirilen değişkenler mevcuttur
$ RootScope'a ait olan her şey Angular uygulamanızda global olarak mevcuttur, oysa $ kapsamına ait olan her şey DOM'un bu kapsamın geçerli olduğu kısımda mevcuttur.
$ RootScope, Angular uygulamasının kök öğesi olan DOM öğesine uygulanır (bu nedenle adı $ rootScope olur). Ng-app direktifini DOM'un bir öğesine eklediğinizde, bu, $ rootScope'un içinde bulunduğu DOM'un kök öğesi olur. Diğer bir deyişle, $ rootScope'un özellikleri vb. Tüm Angular uygulamanız boyunca kullanılabilir olacaktır.
Bir Angular $ kapsamı (ve tüm değişkenleri ve işlemleri), uygulamanızdaki DOM'un belirli bir alt kümesi için mevcuttur. Spesifik olarak, belirli bir denetleyicinin $ kapsamı, DOM'nin söz konusu denetleyicinin uygulandığı kısmı için kullanılabilir (ng-controller yönergesi kullanılarak). Kontrolörün uygulandığı DOM'un bir parçası içinde uygulandığında, ng-tekrar gibi belirli direktiflerin, ana kapsamın alt kapsamlarını oluşturabileceğini unutmayın - aynı kontrolör içinde - bir kontrolörün yalnızca bir kapsam içermesi gerekmez.
Angular uygulamanızı çalıştırdığınızda oluşturulan HTML'ye bakarsanız, Angular kapsamın uygulandığı herhangi bir öğeye (kök öğe dahil) sınıflandırma ng kapsamını eklediğinden, hangi DOM öğelerinin bir kapsam 'içerdiğini' kolayca görebilirsiniz. $ rootScope'a sahip olan uygulamanın).
Bu arada, $ kapsam ve $ rootScope'un başındaki '$' işareti, Angular tarafından ayrılmış öğeler için Angular'da basitçe bir tanımlayıcıdır.
Modüller ve denetleyiciler arasında değişkenleri vb. Paylaşmak için $ rootScope kullanmanın genellikle en iyi uygulama olarak görülmediğini unutmayın. JavaScript geliştiricileri, orada değişkenleri paylaşarak küresel kapsamın 'kirlenmesinden' kaçınmaktan bahsederler, çünkü aynı isimde bir değişken başka bir yerde kullanılırsa, geliştirici $ rootScope üzerinde zaten bildirilmiş olduğunu fark etmeden daha sonra çakışmalar olabilir. Bunun önemi uygulamanın boyutu ve onu geliştiren ekiple birlikte artıyor. İdeal olarak $ rootScope, uygulama genelinde her zaman tutarlı olması amaçlanan sabitleri veya statik değişkenleri içerecektir. Bir şeyleri modüller arasında paylaşmanın daha iyi bir yolu, başka bir konu olan hizmetleri ve fabrikaları kullanmak olabilir!