Saya sarankan Anda membaca dokumentasi resmi Angular mendalam untuk cakupannya. Mulailah di bagian 'Hierarki Cakupan':
https://docs.angularjs.org/guide/scope
Pada dasarnya, $ rootScope dan $ scope keduanya mengidentifikasi bagian tertentu dari DOM di dalamnya
- Operasi sudut dilakukan
- variabel yang dideklarasikan sebagai bagian dari $ rootScope atau $ scope tersedia
Apa pun yang termasuk dalam $ rootScope tersedia secara global di seluruh aplikasi Angular Anda, sedangkan apa pun yang termasuk dalam $ scope tersedia dalam bagian DOM tempat cakupan itu berlaku.
$ RootScope diterapkan ke elemen DOM yang merupakan elemen root untuk aplikasi Angular (oleh karena itu dinamai $ rootScope). Saat Anda menambahkan direktif ng-app ke elemen DOM, ini menjadi elemen root DOM tempat $ rootScope tersedia. Dengan kata lain, properti $ rootScope dll. Akan tersedia di seluruh aplikasi Angular Anda.
Angular $ scope (dan semua variabel dan operasinya) tersedia untuk subset tertentu dari DOM dalam aplikasi Anda. Secara khusus, $ scope untuk kontroler tertentu tersedia untuk bagian DOM di mana kontroler tertentu telah diterapkan (menggunakan direktif ng-controller). Perhatikan juga bahwa arahan tertentu misalnya ng-repeat, ketika diterapkan dalam bagian DOM tempat pengontrol telah diterapkan, dapat membuat cakupan anak dari lingkup utama - dalam pengontrol yang sama - pengontrol tidak harus hanya berisi satu ruang lingkup.
Jika Anda melihat HTML yang dihasilkan saat menjalankan aplikasi Angular, Anda dapat dengan mudah melihat elemen DOM mana yang 'berisi' cakupan, karena Angular menambahkan class ng-scope pada elemen apa pun yang telah diterapkan cakupan (termasuk elemen root dari aplikasi, yang memiliki $ rootScope).
Ngomong-ngomong, tanda '$' di awal $ scope dan $ rootScope hanyalah pengenal di Angular untuk hal-hal yang dicadangkan oleh Angular.
Perhatikan bahwa menggunakan $ rootScope untuk berbagi variabel, dll. Antara modul dan pengontrol umumnya tidak dianggap sebagai praktik terbaik. Pengembang JavaScript berbicara tentang menghindari 'polusi' cakupan global dengan berbagi variabel di sana, karena mungkin akan ada bentrokan nanti jika variabel dengan nama yang sama digunakan di tempat lain, tanpa pengembang menyadarinya sudah dideklarasikan di $ rootScope. Pentingnya hal ini meningkat dengan ukuran aplikasi dan tim yang mengembangkannya. Idealnya, $ rootScope hanya akan berisi konstanta atau variabel statis, yang dimaksudkan untuk selalu konsisten di seluruh aplikasi. Cara yang lebih baik untuk berbagi barang di seluruh modul mungkin menggunakan layanan dan pabrik, yang merupakan topik lain!