麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

(12)AngularJS 1.X 之$watch和$apply方法

2024-04-27 15:18:51
字體:
供稿:網(wǎng)友

引言watch和apply方法1 watch對象的創(chuàng)建1 apply方法實(shí)現(xiàn)雙向綁定

1.引言

      在本篇博客中主要介紹一下AngularJS中的數(shù)據(jù)雙向綁定,我們是否有過這個(gè)疑問:為什么我們使用ng-model命令可以實(shí)現(xiàn)雙向綁定呢?在以前的博客中我們說過有一個(gè)$watch隊(duì)列的概念,只要在頁面綁定一個(gè)變量就會(huì)生成一個(gè)$watch對象,然后將該對象放入到$watch隊(duì)列中,然后我們使用ng-model命令時(shí),AngularJS會(huì)自動(dòng)調(diào)用$apply方法,該方法會(huì)啟動(dòng)$digest循環(huán),然后該循環(huán)會(huì)遍歷$watch隊(duì)列,從而更新UI,形成雙向綁定的效果。

      關(guān)于上面的過程有兩個(gè)而難題:

問題一:$watch對象是自動(dòng)創(chuàng)建的問題二:$apply方法是自動(dòng)調(diào)用的

      接下來我們就來看看入門手動(dòng)調(diào)用這兩個(gè)東西。

2.$watch$apply方法

2.1 $watch對象的創(chuàng)建

首先我們看一下下面的代碼:app.controller('MainCtrl', function($scope) { $scope.foo = "Foo"; $scope.world = "World";});Hello, {{ world}}

      上面的代碼會(huì)自動(dòng)生成一個(gè)$watch對象,也就是說,只有world變量生成了$watch對象,但是foo沒有生成$watch對象,從上面的例子將變量綁定在UI上面,會(huì)自動(dòng)生成$watch對象,沒有綁定的foo變量將不會(huì)生成,這個(gè)過程都是自動(dòng)的。

      接下來我們使用$watch方法手動(dòng)檢測foo的改變。代碼如下:(注意:我們檢測'foo'字符串變量)

<html ng-app="myApp"><head> <script src="js/angular.js"></script> <meta charset="utf-8"> <script> var app = angular.module('myApp',[]); app.controller('MainCtrl', function($scope) { $scope.foo = "Foo"; $scope.world = "World"; $scope.change= function () { $scope.foo="new Foo"; } //注意這里:變量為:"foo" $scope.$watch('foo',function (newValue,oldValue) { //其中:newValue是新值 //oldValue為舊值 //通過 $scope.$watch方法會(huì)給foo變量創(chuàng)建相應(yīng)的$watch對象,然后可以檢測改變量的改變 console.log(newValue); console.log(oldValue); }) }); </script></head><body> <div ng-controller="MainCtrl"> <button ng-click="change();">改變Foo變量的值</button> </div></body></html>運(yùn)行結(jié)果

這里寫圖片描述

2.1 $apply方法實(shí)現(xiàn)雙向綁定

我們看下面的這個(gè)例子:

控制器代碼 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變量就會(huì)加1,但是這并沒有實(shí)時(shí)更新到UI上面,這是因?yàn)椋m然num的值修改了,但是并沒有啟動(dòng)$digest循環(huán),所以沒有實(shí)時(shí)更新,如何啟動(dòng)$digest循環(huán)?答案是$apply方法,接下來我們就是用$apply方法實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)更新。 var app = angular.module('myApp',[]); app.controller('MainCtrl', function($scope,$interval) { $scope.num = 0; setInterval(function () { //這里會(huì)啟動(dòng)$digest循環(huán),實(shí)時(shí)更新 $scope.$apply(function () { $scope.num++ }) },1000); });
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美成人精品一区二区男人小说 | 毛片视频免费观看 | 中文字幕 亚洲一区 | 精品国产乱码久久久久久丨区2区 | 手机国产乱子伦精品视频 | 91精品最新国内在线播放 | 日韩三级伦理在线观看 | 国产精品99一区二区 | 精品成人免费视频 | 日韩在线毛片 | 久久久久久久久久亚洲 | 黑人一级片 | 国产羞羞网站 | 亚洲精品在线观看网站 | 干少妇av | 羞羞视频免费观看网站 | 羞羞视频| 国产午夜精品久久久久婷 | 国产精品久久国产精品 | 久久精品男人 | bt 自拍 另类 综合 欧美 | 国产人成精品一区二区三 | 久久成人激情视频 | 欧美精品18 | 午夜a狂野欧美一区二区 | 护士xxxx | 毛片在线免费 | 久久久婷婷一区二区三区不卡 | 国产日本在线播放 | 暖暖免费观看高清完整版电影 | 91av在线免费视频 | 在线成人影视 | 成人午夜精品久久久久久久3d | 精品国产一区二区三区在线观看 | 精品亚洲一区二区 | 日本aaaa片毛片免费观看视频 | 久久久国产精品电影 | 精品国产一区二区三区久久久 | 国产日韩在线 | 小情侣嗯啊哦视频www | 中文字幕精品在线视频 |