监听model,若是model发生变化,则触发某些事情。数组
$scope. $watch(watchFn,watchAction,deepWatch);函数
watchFn:表示一个,angular表达式或者函数的字符串。测试
watchAction:watchFn发生变化的时候触发此函数,参数为一个function。spa
deepWatch:可选的布尔值命令,检查被监控的每一个属性是否发证变化,只对监听对象时有用,若是第三个参数为true则被监听对象的每个属性变动都会触发第二个参数function,若是为false则只检查监听对象的对象引用地址,若是属性变了,可是引用地址没变,不会触发,除非你改成了其余对象。3d
对于普通的变量时,如数字,字符串等,直接以下写是能够监视到变量的变化,并执行相应的函数的。orm
$scope.count=1;对象
$scope.$watch('count',function(){字符串
...io
});console
对于多个变量的监视变化,执行同一函数的话,能够将这几个变量转为字符串,以‘+’号隔开来进行监视
//当count或page变化时,都会执行这个匿名函数
$scope.count=1;
$scope.page=1;
$scope.$watch('count + page',function(){
...
});
若是直接监听user是改变输入框是不会有值的。
无论哪一个输入框的值发生改变都会有弹框出现。
在写代码的时候,有时会遇到要监视一个函数返回的结果是否变化的状况,因此查了一下$watch 监视函数的状况。
$scope.todoList = []; //可改变
$scope.fun=function(){
var count =0;
angular.forEach($scope.todoList,function(todo){
count += todo.done ?0:1;
});
return count;
};
$scope.$watch('fun()',function(data){
console.log(data); //获取到数据
});
var fun=$scope.$watch('todoList',function(){
//调用fun()取消这个watch
fun();
});
本身项目中的用法:
$scope.$watch(angular.bind(vm, function () {
// do somethin监听某个值的变化。
}), nextFunction, true);
function nextFunction(oldValue,newValue){
//do something
}