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);
}
修改之后,我们预期的美妙更新一次就已经完成!
所以在以后我们在使用过程中,切记对更新的时候脏数据的检查