在$apply方法中存在脏检查,首先apply方法会触发evel方法,当evel方法解析成功后,会去触发digest方法,digest方法会触发watch方法。
$watch(watchFn,watchAction,deepWatch)
watchFn: angular表达式或函数的字符串
watchAction(newValue,oldValue,scope): watchFn发生变化会被调用
deepWatch:可选的布尔值 检查被监控的对象的每个属性是否发生变化
$watch会返回一个函数,想要注销这个watch可以使用函数
例如,实现一个当修改用户名超过五次就报警提示的功能
需要注意的是,$watch 仅仅作为一个监视器的存在,不能阻止你继续修改input内的值。
angular.module('MyApp',[]) .controller('ParserController',function($scope){ $scope.count = 0; $scope.$watch('name',function(newVal,oldVal){ ++$scope.count ; if($scope.count > 5){ alert("hahaha") } }); });
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Page Title</title> <script src="../../src/angular.js"></script> <script src="parser.js"></script> </head> <body ng-app="MyApp"> <div ng-controller="ParserController"> <input ng-model="name"> </div> </body> </html>