免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
Angular Scope解析與應(yīng)用

Scope層級(jí)結(jié)構(gòu)


頂層服務(wù)對(duì)象$rootScope來(lái)源于ng模塊,由$RootScopeProvider提供。因?yàn)閚g模塊是angular.bootstrap()執(zhí)行時(shí)依賴的模塊,所以在整個(gè)應(yīng)用中都可以通過(guò)$rootScope引用,而且在這個(gè)應(yīng)用中是唯一的。但唯一性僅限于單個(gè)應(yīng)用內(nèi),因?yàn)榉?wù)都存在注入器中,而每個(gè)bootstrap應(yīng)用有自己的注入器,所以,$rootScope作為一個(gè)服務(wù),在不同的應(yīng)用中是不同的,彼此互不影響。

除了頂層的$rootScope,子Scope分為普通子Scope和孤立子Scope:普通Scope繼承自父Scope,因此可以在普通子Scope中直接訪問(wèn)父Scope的屬性;孤立Scope和父Scope沒(méi)有繼承關(guān)系,所以不能直接訪問(wèn)父Scope的屬性,但通過(guò)$parent屬性可以訪問(wèn)父Scope對(duì)象。

不論普通子Scope還是孤立子Scope,都可以通過(guò)$scope.$root訪問(wèn)$rootScope。

創(chuàng)建子Scope

  1. $childScope = $parentScope.$new(isolate,parent) 

參數(shù)isolate為布爾值,如果為true,表示創(chuàng)建的子Scope是孤立的。

參數(shù)parent沒(méi)有賦值,默認(rèn)是$parentScope。

監(jiān)測(cè)單個(gè)表達(dá)式

$scope.$watch(watchExp, listener,objectEquality) 


參數(shù)watchExp是被監(jiān)控的表達(dá)式。參數(shù)listener是監(jiān)聽(tīng)方法。參數(shù)objectEquality是布爾值,如果為true,表示比較方式為對(duì)象的比較,而不是基本類型相互比較。如果是對(duì)象比較,只要兩個(gè)對(duì)象的屬性一致,則同樣也認(rèn)為是相等的。

每執(zhí)行一次$watch()方法創(chuàng)建一個(gè)watcher對(duì)象,這個(gè)watcher對(duì)象包含以下屬性:

  • fn: 即參數(shù)listener。

  • get: $parse(watchExp)得到的方法。

  • exp: 即參數(shù)watchExp。

  • eq:即參數(shù)objectEquality。

  • last: 參數(shù)watchExp上一次的執(zhí)行結(jié)果。

其中監(jiān)聽(tīng)方法listener的接受的參數(shù)分別為:

  •   value:這次執(zhí)行的結(jié)果。

  •   last:上次執(zhí)行的結(jié)果。

  •   current:當(dāng)前scope對(duì)象。

表達(dá)式解析之后,方法get()的參數(shù):

  • current:scope對(duì)象。

監(jiān)測(cè)一組表達(dá)式

$scope.$watchGroup(watchExps, listener) 

監(jiān)測(cè)一組表達(dá)式,只要其中一個(gè)表達(dá)式發(fā)生變化,就執(zhí)行Listener。

監(jiān)聽(tīng)方法listener的接受的參數(shù)分別為:

  • newValues:這次執(zhí)行的結(jié)果。

  • oldValues:上次執(zhí)行的結(jié)果。

  • current:當(dāng)前scope對(duì)象。

監(jiān)測(cè)集合對(duì)象

$scope.$watchCollection(collection,listener) 

監(jiān)測(cè)數(shù)組等集合對(duì)象是否發(fā)生了變化。

原理:在JavaScript中,數(shù)組和對(duì)象一樣是有屬性的,數(shù)組的索引就是數(shù)組的元素。所以$watchCollection其實(shí)就是遍歷集合的索引屬性,通過(guò)監(jiān)測(cè)每個(gè)屬性值的變化來(lái)判斷集合是否發(fā)生了變化。當(dāng)然,集合長(zhǎng)度發(fā)生變化也在監(jiān)測(cè)范圍。

綁定事件監(jiān)聽(tīng)
  1. var destroyFn = $scope.$on(name, listener);  

  2. destroyFn();  // remove this listener 

監(jiān)聽(tīng)指定事件,并返回摧毀該事件監(jiān)聽(tīng)的destroy方法。

事件監(jiān)聽(tīng)接受的第一個(gè)參數(shù)是event對(duì)象,event對(duì)象的屬性如下:

  • name:事件名。

  • targetScope:目標(biāo)scope。

  • currentScope:當(dāng)前scope。

  • stopPropagation:方法,中斷執(zhí)行。

  • preventDefault:方法,取消默認(rèn)行為。

  • defaultPrevented:如果preventDefault()被執(zhí)行過(guò),則為true。

事件監(jiān)聽(tīng)listener中的this指向null。

向下派發(fā)事件

把Scope的層級(jí)結(jié)構(gòu)比作一個(gè)從上而下的樹(shù),向下派發(fā)就是從根節(jié)點(diǎn)到子節(jié)點(diǎn)的過(guò)程。

在當(dāng)前Scope派發(fā)事件,并派發(fā)給所有的子Scope(包括后代Scope),這個(gè)與瀏覽器的事件派發(fā)完全不同。更重要的是,事件是按樹(shù)的深度優(yōu)先順序派發(fā)的:根節(jié)點(diǎn)à左節(jié)點(diǎn)à…à左葉子節(jié)點(diǎn)à右葉子節(jié)點(diǎn)à…à右節(jié)點(diǎn)。

$scope.$broadcast(name, args); 
向上派發(fā)事件

從當(dāng)前Scope開(kāi)始,向父Scope派發(fā)事件。

$scope.$emit(name, args); 

原理:通過(guò)$scope的$parent訪問(wèn)父Scope,從而實(shí)現(xiàn)向父scope派發(fā)事件。這個(gè)過(guò)程和瀏覽器事件的冒泡過(guò)程相似。

執(zhí)行表達(dá)式

在當(dāng)前Scope范圍內(nèi)執(zhí)行表達(dá)式。

  1. $scope.$eval(expr, locals);  

  2. $scope.$apply(expr);  

  3. // == $parse(expr)(this, locals) 


方法$eval()和$apply()的區(qū)別:$apply()會(huì)捕獲expr執(zhí)行中的異常,而$eval()不會(huì)。所以$eval()適合Angular內(nèi)部代碼調(diào)式使用。而$apply()一般是在瀏覽器事件監(jiān)聽(tīng),setTimeout等方法中被使用。

http://geek.csdn.net/news/detail/65949




移動(dòng)一小步,視界大不同!

更多程序員技術(shù)交流,奇聞?shì)W事,

歡迎掃描下面二維碼下載CSDN
Android、iOS移動(dòng)客戶端
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
AngularJS自學(xué)之路(二)
Angularjs十大經(jīng)典面試題
Angular.js中使用$watch監(jiān)聽(tīng)模型變化
AngularJS 數(shù)據(jù)綁定與 $digest 循環(huán) | 天碼營(yíng)
AngularJS:何時(shí)應(yīng)該使用Directive、Controller、Service?
Angular-UI Bootstrap組件實(shí)現(xiàn)警報(bào)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服