您的位置:首页 > 移动开发

angularJS<五、$scope中的$apply和$digest>

2015-09-14 08:33 549 查看
1、  脏数据检查

将原有的对象赋值一份快照,在摸个时间比价现在对象与快照的值,如果不一样就表明发生变化

2、$digest方法

$digest方法则是angularJs中调用脏数据检查。进行数据更新;

3、$apply

         因为$digest不具备安全检查的,以及异常抛出,更主要的$diges只能对通过evel方法解析后的数据进行脏数据检查,所以angularJs用$apply将$digest进行了封装,所以在我们启动脏数据处理则都用$apply方法,不会去直接使用$digest,可以从$digest方法源码中看到,异常处理,并对内容通过evel方法进行接卸后,才调用$diges方法进行脏数据检查;

         另外$apply是有参数的,如果是不传入参数,那么将会对所有数据进行脏数据检查

4、示例,做一个页面的时间,每一秒钟更新一次

直接上代码:

 

Html中的代码:

         <body
ng-app>
      <div
ng-controller="controllerDemo">
         {{date}}
      </div>
</body>

 

 

Controller.js中的代码:

         var controllerDemo=function($scope){
      $scope.date=new Date();
      setInterval(function(){
         $scope.date=new Date;
      },1000);
}
 

如上代码执行html后发现不能实现预期,时间没秒更新一次的效果,因为,这里只是更新了$scope.date的值,但是并未出发脏数据检查;既然没出发,那么为什么初始的赋值能显示呢?那是因为ng-controller加载完成后会自动触发一次脏数据检查;

那么这里怎么达到我们预期每一秒更新一次呢?

将Controller.js中的代码修改如下:

var controllerDemo=function($scope){
   $scope.date=new Date(); 

   setInterval(function(){
      $scope.$apply(function(){
         $scope.date=new Date();
      });
   },1000);
}
修改之后,我们预期的美妙更新一次就已经完成!

 

 

所以在以后我们在使用过程中,切记对更新的时候脏数据的检查
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息