โดยการตรวจสอบ$scopeวัตถุที่สกปรก
Angular รักษาความเรียบง่ายarrayของนักดูใน$scopeวัตถุ หากคุณตรวจสอบใด ๆ$scopeคุณจะพบว่ามันมีที่เรียกว่าarray$$watchers
ผู้เฝ้าดูแต่ละคนนั้นเป็นobjectสิ่งที่มีอยู่เหนือสิ่งอื่นใด
- นิพจน์ที่ผู้เฝ้าดูกำลังมอนิเตอร์ นี่อาจเป็น
attributeชื่อหรือสิ่งที่ซับซ้อนกว่านี้ 
- ค่าที่ทราบล่าสุดของการแสดงออก สามารถตรวจสอบกับค่าที่คำนวณได้ในปัจจุบันของการแสดงออก หากค่าต่างกันผู้เฝ้าสังเกตจะเรียกใช้ฟังก์ชันและทำเครื่องหมาย
$scopeว่าสกปรก 
- ฟังก์ชั่นที่จะใช้งานถ้าตัวเฝ้าดูสกปรก
 
วิธีกำหนดผู้ดู
มีหลายวิธีในการกำหนดผู้เฝ้าดูใน AngularJS 
คุณอย่างชัดเจนสามารถบน$watchattribute$scope
$scope.$watch('person.username', validateUnique);
 
คุณสามารถวางการ{{}}แก้ไขในแม่แบบของคุณ (ผู้เฝ้าดูจะถูกสร้างขึ้นสำหรับคุณในปัจจุบัน$scope)
<p>username: {{person.username}}</p>
 
คุณสามารถขอคำสั่งเช่นng-modelกำหนดผู้เฝ้าดูคุณ
<input ng-model="person.username" />
 
$digestวงจรตรวจสอบดูทั้งหมดกับค่าสุดท้ายของพวกเขา
เมื่อเราโต้ตอบกับ AngularJS ผ่านช่องทางปกติ (ng-model, ng-repeat และอื่น ๆ ) วงจรย่อยจะถูกเรียกใช้โดยคำสั่ง
แยกยวงจรคือการข้ามผ่านความลึกแรกของ$scopeและเด็กทั้งหมด สำหรับแต่ละรายการ$scope objectเราวนซ้ำ$$watchers arrayและประเมินค่านิพจน์ทั้งหมด หากค่านิพจน์ใหม่นั้นแตกต่างจากค่าที่ทราบล่าสุดฟังก์ชันของผู้สังเกตการณ์จะถูกเรียกใช้ ฟังก์ชั่นนี้อาจคอมไพล์ซ้ำส่วนหนึ่งของ DOM, คำนวณค่าอีกครั้ง$scope, เรียกAJAX requestสิ่งที่คุณต้องการให้ทำ
ทุกขอบเขตถูกสำรวจและทุกการแสดงออกของนาฬิกาจะถูกประเมินและตรวจสอบกับค่าสุดท้าย
หากทริกเกอร์ตัว$scopeเตือนทำงานสัญญาณสกปรก
หากทริกเกอร์เฝ้าดูแอพจะรู้ว่ามีบางอย่างเปลี่ยนไปและ$scopeจะมีการทำเครื่องหมายว่าสกปรก
ฟังก์ชั่น Watcher สามารถเปลี่ยนคุณลักษณะอื่น ๆ บนหรือผู้ปกครอง$scope $scopeหาก$watcherมีการเรียกใช้ฟังก์ชันหนึ่งเราไม่สามารถรับประกันได้ว่าฟังก์ชันอื่น ๆ ของเรา$scopeยังคงสะอาดอยู่ดังนั้นเราจึงดำเนินการรอบการย่อยทั้งหมดอีกครั้ง
นี่เป็นเพราะ AngularJS มีการเชื่อมโยงสองทางดังนั้นข้อมูลสามารถถูกส่งกลับไปที่$scopeต้นไม้ เราอาจเปลี่ยนค่าที่สูงกว่า$scopeที่ถูกย่อยแล้ว $rootScopeบางทีเราเปลี่ยนค่าใน
หาก$digestสกปรกเราดำเนินการ$digestรอบทั้งหมดอีกครั้ง
เราวนรอบอย่างต่อเนื่อง$digestจนกว่าวงจรย่อยจะทำความสะอาด ( $watchนิพจน์ทั้งหมดมีค่าเหมือนกันกับรอบก่อนหน้า) หรือถึงขีด จำกัด การแยกย่อย โดยค่าเริ่มต้นขีด จำกัด นี้ถูกตั้งไว้ที่ 10
หากเราถึงขีด จำกัด การแยกย่อย AngularJS จะทำให้เกิดข้อผิดพลาดในคอนโซล:
10 $digest() iterations reached. Aborting!
การแยกย่อยทำได้ยากบนเครื่อง แต่ง่ายสำหรับผู้พัฒนา
อย่างที่คุณเห็นทุกครั้งที่มีการเปลี่ยนแปลงในแอป AngularJS AngularJS จะตรวจสอบผู้เฝ้าดูทุกคนใน$scopeลำดับชั้นเพื่อดูวิธีการตอบสนอง สำหรับนักพัฒนาซอฟต์แวร์นี่เป็นประโยชน์อย่างมากเนื่องจากคุณต้องเขียนรหัสการเดินสายเกือบไม่ได้เลย AngularJS จะสังเกตเห็นว่ามีการเปลี่ยนแปลงค่าและทำให้แอพที่เหลือสอดคล้องกับการเปลี่ยนแปลง
จากมุมมองของตัวเครื่องแม้ว่าจะไม่มีประสิทธิภาพมากและจะทำให้แอปของเราช้าลงหากเราสร้างนักดูมากเกินไป Misko ได้เสนอตัวเลขของนักดูประมาณ 4,000 คนก่อนที่แอปของคุณจะรู้สึกช้าในเบราว์เซอร์รุ่นเก่า
ขีด จำกัด นี้เข้าถึงได้ง่ายหากคุณng-repeatมีขนาดใหญ่JSON arrayเกินไป คุณสามารถลดปัญหานี้ได้โดยใช้คุณสมบัติเช่นการเชื่อมโยงครั้งเดียวเพื่อรวบรวมแม่แบบโดยไม่ต้องสร้างนักดู
วิธีหลีกเลี่ยงการสร้างนักดูมากเกินไป
ทุกครั้งที่ผู้ใช้โต้ตอบกับแอพของคุณผู้ตรวจสอบแต่ละคนในแอปจะได้รับการประเมินอย่างน้อยหนึ่งครั้ง ส่วนใหญ่ของการเพิ่มประสิทธิภาพแอป AngularJS คือการลดจำนวนผู้ดูใน$scopeต้นไม้ของคุณ วิธีง่ายๆในการทำเช่นนี้คือมีผลผูกพันครั้งเดียว
หากคุณมีข้อมูลที่จะไม่เปลี่ยนแปลงบ่อยครั้งคุณสามารถผูกมันได้เพียงครั้งเดียวโดยใช้ไวยากรณ์ :: เช่น:
<p>{{::person.username}}</p>
หรือ
<p ng-bind="::person.username"></p>
การผูกจะถูกทริกเกอร์เมื่อมีการแสดงเท็มเพลตที่มีอยู่และข้อมูลถูกโหลดเข้า$scopeมา
นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อคุณมีng-repeatสิ่งของหลายอย่าง
<div ng-repeat="person in people track by username">
  {{::person.username}}
</div>