理解 AngularJS 的 $watch()
。
$watch(watchExpression<string|Function(scope)>, listener, [objectEquality])
$watch()
可以接受两个函数作为参数,第一个参数数返回监控的 $scope
的变量,第二个函数操作该变量的旧值和新值,第三个参数是可选的,类型为 Boolean,true
则表明第一个参数返回的是一个对象,默认为 false
,结构:
1 | $scope.$watch(function (scope){ |
一个例子:
1 | $scope.$watch(function(scope) { |
另一个例子:
1 | var scope = $rootScope; |
$watchGroup(watchExpressions<string|Function(scope)>, listener);
允许传入一个字符串数组或一个函数数组进行监控变化。
1 | $scope.names = ['igor', 'matias', 'misko', 'james']; |
$apply
$apply
将数据变化和 digest cycle
连为一起。
$apply
可被看作一个连接机制。当被你设置了 $watch
的 $scope
属性改变时,Angular 都会知道,那是因为 Angular 已经知道去监控那些改变,所以如果这种情况在框架中发生时,digest cycle 都会被执行。
然而有时候你会在 Angular 之外手动改变 $scope
的属性,比如某个 scope
属性通过 jQuery 的 $.ajax()
改变,这样的话 Angular 并不能随之执行 digest cycle,此时就得用到 $apply
,
参考: