ฉันขอแนะนำให้คุณอ่านเอกสารเชิงลึกเชิงลึกอย่างเป็นทางการสำหรับขอบเขต เริ่มต้นที่ส่วน 'ลำดับชั้นขอบเขต':
https://docs.angularjs.org/guide/scope
โดยพื้นฐานแล้ว $ rootScope และ $ scope ระบุส่วนเฉพาะของ DOM ที่อยู่ภายใน
- ดำเนินการเชิงมุม
- ตัวแปรที่ประกาศเป็นส่วนหนึ่งของ $ rootScope หรือ $ scope นั้นพร้อมใช้งาน
ทุกสิ่งที่เป็นของ $ rootScope สามารถใช้ได้ทั่วโลกในแอป Angular ของคุณในขณะที่ทุกสิ่งที่เป็นของ $ ขอบเขตจะมีอยู่ในส่วนของ DOM ที่ขอบเขตนั้นใช้
$ rootScope ถูกนำไปใช้กับองค์ประกอบ DOM ที่เป็นองค์ประกอบรูทสำหรับแอพ Angular (ดังนั้นชื่อ $ rootScope) เมื่อคุณเพิ่มคำสั่ง ng-app ลงในองค์ประกอบของ DOM สิ่งนี้จะกลายเป็นองค์ประกอบหลักของ DOM ที่ $ rootScope พร้อมใช้งาน กล่าวอีกนัยหนึ่งคุณสมบัติและอื่น ๆ ของ $ rootScope จะพร้อมใช้งานตลอดทั้งแอปพลิเคชัน Angular ของคุณ
ขอบเขต $ Angular (และตัวแปรและการดำเนินการทั้งหมด) มีให้สำหรับ DOM บางส่วนภายในแอปพลิเคชันของคุณ โดยเฉพาะขอบเขต $ สำหรับคอนโทรลเลอร์เฉพาะจะพร้อมใช้งานในส่วนของ DOM ที่ใช้ตัวควบคุมนั้น ๆ (โดยใช้คำสั่ง ng-controller) โปรดทราบว่าคำสั่งบางอย่างเช่น ng-repeat เมื่อนำไปใช้ภายในส่วนหนึ่งของ DOM ที่มีการใช้คอนโทรลเลอร์สามารถสร้างขอบเขตลูกของขอบเขตหลัก - ภายในคอนโทรลเลอร์เดียวกัน - คอนโทรลเลอร์ไม่จำเป็นต้องมีเพียงขอบเขตเดียว
หากคุณดู HTML ที่สร้างขึ้นเมื่อคุณเรียกใช้แอป Angular คุณสามารถดูได้อย่างง่ายดายว่าองค์ประกอบ DOM ใด 'มี' ขอบเขตเนื่องจาก Angular จะเพิ่มขอบเขตระดับชั้นบนองค์ประกอบใด ๆ ที่มีการใช้ขอบเขต (รวมถึงองค์ประกอบราก ของแอปซึ่งมี $ rootScope)
อย่างไรก็ตามเครื่องหมาย '$' ที่จุดเริ่มต้นของ $ scope และ $ rootScope เป็นเพียงตัวระบุใน Angular สำหรับสิ่งที่ Angular สงวนไว้
โปรดทราบว่าการใช้ $ rootScope สำหรับการแบ่งปันตัวแปร ฯลฯ ระหว่างโมดูลและคอนโทรลเลอร์ไม่ถือว่าเป็นแนวทางปฏิบัติที่ดีที่สุด นักพัฒนา JavaScript พูดถึงการหลีกเลี่ยง 'มลพิษ' ของขอบเขตทั่วโลกโดยการแบ่งปันตัวแปรที่นั่นเนื่องจากอาจมีข้อขัดแย้งในภายหลังหากมีการใช้ตัวแปรชื่อเดียวกันที่อื่นโดยที่นักพัฒนาไม่ทราบว่ามีการประกาศไว้ใน $ rootScope แล้ว ความสำคัญของสิ่งนี้จะเพิ่มขึ้นตามขนาดของแอปพลิเคชันและทีมที่กำลังพัฒนา ตามหลักการแล้ว $ rootScope จะมีเฉพาะค่าคงที่หรือตัวแปรคงที่ซึ่งตั้งใจให้สอดคล้องกันตลอดเวลาในแอป วิธีที่ดีกว่าในการแบ่งปันสิ่งต่างๆในโมดูลอาจเป็นการใช้บริการและโรงงานซึ่งเป็นอีกหัวข้อหนึ่ง!