引言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); });新聞熱點
疑難解答