1.$apply
anjularjs通过$apply方法去执行脏检查,及时告诉model绑定变量更新。
示例:定义一个date变量显示在页面上,它的控制器是firstCtrl,这个date变量有一个时钟功能,每一秒变一次。
页面上:
<div ng-controller="firstCtrl">
{{date}}
</dv>
Controller.js:
var firstCtrl=function($scope){
$scope.date=new Date();
setInterval(function(){
$scope.$apply(function(){
$scope.date=new Date();
});
});
}
2.$watch
使用watch手动的监听某个基本变量或者对象变量,当变量或者对象变量改变的时候去触发某些事件。
示例:监听name变量的变化,当name变量的变化超过30次,就不让其变化,并一直保持某个值。
页面上:
<div ng-controller="firstCtrl">
<input type="text" ng-model="name"></input>
{{name}}
</div>
controller.js:
var firstCtrl=function($scope){
$scope.name='小明';
$scope.count=0;
$scope.$watch('name',function(newValue,oldValue){
++$scope.count;
if(scope.count>30){
$scope.name='watch方法监听name变化超过30次之后不让其改变!';
}
});
}
注意:也许你会有这样的疑惑,$apply方法是触发脏检查的,但是watch方法里面的name变量和count居然也能自动变化?其实在apply方法去触发脏检查的时候,
也是通过watch方法找到digest方法去判断并更新model的,所以道理是相同的。