angularJS<六、$scope里的$watch方法>

                                               angularJS<六、$scope里的$watch方法>

1、$watch的作用

         主要用来监听model,如果model发生变化,则触发某些事情

 

比如我们前面说到的脏数据检查脏数据检查调用$apply方法,调用evel进行数据解析,再调用$digest方法进行检查 ,在$digest执行时候,如果$watch观察到value与上一次执行时不一样时候就会触发进行数据更新;

2、$watch的格式

         $scope. $watch(watchFn,watchAction,deepWatch);

   参数解释:

   watchFn:表示一个,angular表达式或者函数的字符串

   watchAction:watchFn发生变化的时候触发此函数,参数为一个function

deepWatch:可选的布尔值命令,检查被监控的每个属性是否发证变化,只对监听对象时有用,如果第三个参数为true 则被监听对象的每一个属性变更都会触发第二个参数function,如果为false则只检查监听对象的对象引用地址,如果属性变了,但是引用地址没变,不会触发,除非你改为了其他对象;

3、实例

   话不多说,直接上代码:

   先说下实现的功能,我们还是在作用域定义一个数字形变量,变量只允许输入小于100的数字切大于1的数字,如果不在该范围,则把变量的值改为0,此处没对字符串处理,所以请不要输入字符串和负数!

 

Html代码:

<divng-controller="controllerDemo">

         <inputtype="text"value=""ng-model="name">

         <hr>

         输入的值:{{name}}

      </div>

 

Controller.js代码:

var controllerDemo=function($scope){

$scope.name=0;        $scope.$watch("name",function(newValue,oldValue){

         if($scope.name>99||$scope.name<1){

            $scope.name=0;

         }

      });

}

 

测试情况如下:

当输入100以下


当你再输入超过100,则成了

 

可以自己测试一下

 

 

以上方法可以看出只用到了$watch的前两个参数,那么第三个参数怎么使用呢?下面,我们来看一下,当我们$scope作用域里面放的是一个对象user的时候,怎么处理!

 

我们需要对作用域user对象做监听,监听其每一个属性,只要有变更就弹框提示属性变更了,实现方式如下

Html代码:

   <divng-controller="controllerDemo">

         当作用域放入一个对象<br>

         name的model的input:<inputtype="text"value=""ng-model="user.name"><br>

         age的model的input:<inputtype="text"value=""ng-model="user.age">

        

         name的值:{{user.name}}<br>

         age的值:{{user.age}}

      </div>

 

Controller.js代码:

 

var controllerDemo=function($scope){

   $scope.user={

      name:"张三",

      age:20

   }

   $scope.$watch("user.name",function(newValue,oldValue){

      alert("username属性改为了"+$scope.user.name);

   });

   $scope.$watch("user.name",function(newValue,oldValue){

      alert("userage属性变了"+$scope.user.age);

   });

}

测试结果:

 1,修改name


2,修改age的mode

 

假设我们的user有100个属性,那么我们是否就应该写入100个类似的监听方法!太过于复杂

 

这个时候我们就可以用$watch的第三个属性进行控制了,我们修改controller.js的代码如下:

var controllerDemo=function($scope){

   $scope.user={

      name:"张三",

      age:20

   }

   $scope.$watch("user",function(newValue,oldValue){

      alert("user属性变了");

   },true);

}

 

测试结果,如下:

 



 

具体是哪个属性改变,在后期将做说明;

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值