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);
}
修改之后,我们预期的美妙更新一次就已经完成!
所以在以后我们在使用过程中,切记对更新的时候脏数据的检查
将原有的对象赋值一份快照,在摸个时间比价现在对象与快照的值,如果不一样就表明发生变化
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);
}
修改之后,我们预期的美妙更新一次就已经完成!
所以在以后我们在使用过程中,切记对更新的时候脏数据的检查
相关文章推荐
- @@IDENTITY与SCOPE_IDENTITY()
- SQLServer APPLY表运算符使用介绍
- sql server 2008中的apply运算符使用方法
- javascript中call和apply的用法示例分析
- JavaScript中的call方法和apply方法使用对比
- 理清apply(),call()的区别和关系
- Javascript中call与apply的学习笔记
- 理解JavaScript的caller,callee,call,apply
- JavaScript中apply与call的用法意义及区别说明
- 完美解决IE低版本不支持call与apply的问题
- JavaScript中的apply()方法和call()方法使用介绍
- JavaScript学习点滴 call、apply的区别
- js apply/call/caller/callee/bind使用方法与区别分析
- Function.prototype.call.apply结合用法分析示例
- JavaScript 学习笔记(九)call和apply方法
- Javascript
- javascript中apply和call方法的作用及区别说明
- angularJS 中$attrs方法使用指南
- JavaScript中函数(Function)的apply与call理解
- 从JQuery源码分析JavaScript函数的apply方法与call方法