引言watch和apply方法1 watch对象的创建1 apply方法实现双向绑定
在本篇博客中主要介绍一下AngularJS
中的数据双向绑定,我们是否有过这个疑问:为什么我们使用ng-model
命令可以实现双向绑定呢?在以前的博客中我们说过有一个$watch
队列的概念,只要在页面绑定一个变量就会生成一个$watch
对象,然后将该对象放入到$watch
队列中,然后我们使用ng-model
命令时,AngularJS
会自动调用$apply
方法,该方法会启动$digest
循环,然后该循环会遍历$watch
队列,从而更新UI,形成双向绑定的效果。
关于上面的过程有两个而难题:
问题一:$watch
对象是自动创建的问题二:$apply
方法是自动调用的接下来我们就来看看入门手动调用这两个东西。
$watch
和$apply
方法$watch
对象的创建 上面的代码会自动生成一个$watch
对象,也就是说,只有world
变量生成了$watch
对象,但是foo
没有生成$watch
对象,从上面的例子将变量绑定在UI上面,会自动生成$watch
对象,没有绑定的foo
变量将不会生成,这个过程都是自动的。
接下来我们使用$watch
方法手动检测foo
的改变。代码如下:(注意:我们检测'foo'
字符串变量)
$apply
方法实现双向绑定我们看下面的这个例子:
控制器代码 var app = angular.module('myApp',[]); app.controller('MainCtrl', function($scope) { $scope.num = 0; setInterval(function () { $scope.num++ },1000); });html模板 <div ng-controller="MainCtrl"> {{num}} </div>代码是没有问题的,每隔一秒中num变量就会加1,但是这并没有实时更新到UI上面,这是因为,虽然num的值修改了,但是并没有启动$digest
循环,所以没有实时更新,如何启动$digest
循环?答案是$apply
方法,接下来我们就是用$apply
方法实现数据的实时更新。 var app = angular.module('myApp',[]); app.controller('MainCtrl', function($scope,$interval) { $scope.num = 0; setInterval(function () { //这里会启动$digest循环,实时更新 $scope.$apply(function () { $scope.num++ }) },1000); });新闻热点
疑难解答