ใน rootScope จะมีฟังก์ชั่นต่างๆ ที่ใช้ในการจัดการข้อมูลต่างๆ

เช่น $watch, $apply, $broadcast, $on, $emit, $destroy อยู่

$watch() คือ อะไร ?

$watch เป็นฟังก์ชั่นที่ใช้ในการติดตามการเปลี่ยนแปลงของข้อมูล โดยมีโครงสร้างดังนี้

$watch(function1, function2);

ฟังก์ชั่นแรกจะ return ค่า ซึ่งจะคืนค่าที่กำลังติดตามอยู่ จะถูกเรียกทุกครั้งเมื่อฟังก์ชั่น digest() ทำงาน (Angular จะทำการเรียก digest() ทุกครั้งอัตโนมัติ)

$watch( 
	// ฟังก์ชั่นนี้จะ return ค่าที่ทำการติดตามอยู่ โดยจะถูกเรียกทุกครั้งที่มีการเรียก digest()
	function () {
		return watchedData;
	},// ฟังก์ชั่นนี้จะถูกเรียกใช้ เมื่อมีการเปลี่ยนแปลงค่า
	function ( newValue, oldValue ) { 
		
	}
);

เมื่อเกิดการเปลี่ยนแปลงของข้อมูล data ไม่ว่าจะมาจาก Controller ,Directive หรือจากหน้าจอ

$watch จะทำการเรียกใช้งานฟังก์ชั่น doSomething()

ตัวอย่างการใช้งาน $watch

สร้าง Controller เก็บตัวอักษร และจำนวนตัวอักษร

angular.module('application', [])
	.controller('demoController', function($scope) {
		$scope.text = "";
		$scope.textLength = 0;
		$scope.$watch(function () { return $scope.text; }, function (newData, oldData) {
			console.log("change " + newData.length + " : " + oldData.length);
			if (newData.length !== oldData.length) {
				$scope.textLength = newData.length;
			}
		});
	});

ทำการเรียกใช้ demoController ใน html

<div ng-controller="demoController as demo">
	<input name="text" ng-model="text" />
	<p>Text is : {{text}}</p>
	<p>Length is : {{textLength}}</p>
</div>

จะได้ผลลัพธ์ดังนี้

Text is : "{{text}}"

Length is : {{textLength}}