angular臟檢查機(jī)制原理(angular臟檢測(cè))

發(fā)布時(shí)間:2024-03-09
本文主要介紹角臟檢測(cè)機(jī)制原理(角臟檢測(cè)),下面一起看看角臟檢測(cè)機(jī)制原理(角臟檢測(cè))相關(guān)資訊。
|||瀏覽器事件周期和mvw的角度
骯臟的檢查和是angular中的核心機(jī)制之一,是實(shí)現(xiàn)雙向綁定和mvvm模式的重要基礎(chǔ)。
angular將雙向綁定轉(zhuǎn)換成一堆watch表達(dá)式,然后遞歸檢查這些watch表達(dá)式的結(jié)果是否發(fā)生了變化,如果是,則執(zhí)行相應(yīng)的watchdog函數(shù)。當(dāng)model的值不再改變時(shí),將不再觸發(fā)觀察器函數(shù),一個(gè)完整的摘要循環(huán)將結(jié)束。
因?yàn)槲覀兛梢栽诓桓淖兙幊趟季S的情況下,用相同的語(yǔ)言和相同的事件模型快速開發(fā)nodejs程序,nodejs很快流行起來,javascript全棧也越來越流行。
我們經(jīng)常聽到angular是mv*的一個(gè)框架,因?yàn)閍ngular擴(kuò)展了瀏覽器的事件模型,建立了自己的上下文環(huán)境。
|| $手表功能| |角度
觀察表達(dá)式是靈活的:它可以是一個(gè)函數(shù),一個(gè)$scope上的屬性名,或者一個(gè)字符串形式的表達(dá)式。$scope上的屬性名或表達(dá)式最終將被$parse服務(wù)解析為一個(gè)響應(yīng)函數(shù)來獲取屬性值。
所有的觀察函數(shù)都將入到作用域的頭部。$$watchers數(shù)組由unshift函數(shù)調(diào)用,以便它可以被下面的$digest使用。
最后,$watch函數(shù)將返回一個(gè)unregister函數(shù),一旦我們調(diào)用它,我們就可以刪除已注冊(cè)的watcher。
需要注意的是,angular默認(rèn)不使用angular.equals函數(shù)進(jìn)行深度比較,因?yàn)橛? =比較更快,所以在比較數(shù)組或?qū)ο髸r(shí)會(huì)檢查引用。這就導(dǎo)致兩個(gè)內(nèi)容完全相同的表達(dá)式被判斷為不同。如果需要深度比較,第三個(gè)可選參數(shù)objectequality需要顯式設(shè)置為true,比如$ watch( ;someexp ,函數(shù){...},真)。
angular還提供了$watchgroup和$watchcollection方法來監(jiān)視一個(gè)數(shù)組或一組屬性。
|| $摘要函數(shù)| |角度
如前所述,angular擴(kuò)展了瀏覽器的事件周期。什么?;怎么了?
在view上接受事件指令轉(zhuǎn)發(fā)的事件時(shí),會(huì)切換到angular的上下文環(huán)境來響應(yīng)此類事件,并觸發(fā)$ term的$ term摘要循環(huán)。
$digest循環(huán)實(shí)際上包括兩個(gè)while循環(huán)。它它們是:$evalasync的異步操作隊(duì)列和$watch的觀察器隊(duì)列。
當(dāng)$digest循環(huán)發(fā)生時(shí),它將遍歷當(dāng)前$scope及其所有子$ scope上注冊(cè)的所有觀察器函數(shù)。
遍歷所有觀察器函數(shù)被稱為臟檢查。在一輪臟檢查后,如果任何觀察器監(jiān)視的值發(fā)生了變化,將進(jìn)行另一輪臟檢查,直到所有觀察器函數(shù)報(bào)告它們監(jiān)視的值沒有變化。
當(dāng)$digest循環(huán)結(jié)束時(shí),模型的變更結(jié)果被更新到dom。這可以合并多個(gè)更新,并防止頻繁的dom屬性。
需要注意的是,在$digest循環(huán)結(jié)束之前,如果超過10輪臟檢查,就會(huì)拋出異常,阻止臟檢查無(wú)限期進(jìn)行下去。
什么時(shí)候它會(huì)進(jìn)入這個(gè)角度的背景,并引發(fā) 臟檢查機(jī)制 ?這個(gè)問題很重要,也很頭疼。
每個(gè)進(jìn)入angular context環(huán)境的事件都會(huì)執(zhí)行一個(gè)$digest循環(huán)。對(duì)于ngmodel監(jiān)控的表單交互控件,每一個(gè)字符輸入都會(huì)觸發(fā)一個(gè)循環(huán)來檢查$watcher函數(shù),以便及時(shí)更新視圖。angular1.3之后,ngmodeloptions可用于配置,以修改默認(rèn)觸發(fā)模式。
|| $應(yīng)用于| |角度
$digest是一個(gè)內(nèi)部函數(shù),不應(yīng)該在正常的應(yīng)用程序代碼中直接調(diào)用。如果要主動(dòng)觸發(fā),應(yīng)該調(diào)用作用域。$apply函數(shù),這是一個(gè)觸發(fā)angular 臟檢查機(jī)制 。
需要注意的是angular只能管理它知道的行為觸發(fā)方法,但是can t涵蓋所有角度操作場(chǎng)景。這就是為什么當(dāng)我們打包第三方j(luò)query插件時(shí),我們可以 t自動(dòng)更新視圖,但是我們需要調(diào)用$scope。$手動(dòng)應(yīng)用。
在集成jquery插件時(shí),有時(shí)會(huì)出現(xiàn)正在進(jìn)行的摘要錯(cuò)誤。如果你還能 排除bug后無(wú)法解決,可以考慮用$ term來解決。
神奇的使用$ term出來
在延遲任務(wù)中修改綁定到接口的變量,那么window.settimeout就不會(huì)觸發(fā) 骯臟的檢查和更新用戶界面。您可能會(huì)想:添加$scop: $摘要已在進(jìn)行中
什么?;這是怎么回事?哦,棱角分明該部正在進(jìn)行一項(xiàng)調(diào)查骯臟的檢查和。一個(gè)聰明的程序員巧妙地編寫了下面的代碼來解決這個(gè)問題:
函數(shù)safeapply(scope,fn){ (scope.phase||scop:示波器。$ apply(fn);}代碼,在執(zhí)行apply函數(shù)之前,它會(huì)先檢查是否有 骯臟的檢查和angular內(nèi)部,如果有,就直接執(zhí)行函數(shù),不需要$ apply否則,臟檢查不會(huì)啟動(dòng),因此$apply會(huì)執(zhí)行該函數(shù)。呵呵 完美 解決方案,isn 不是嗎?
請(qǐng)注意,作者在上面完美這個(gè)詞上加了引號(hào)。angular為我們內(nèi)置了$ term $timeout服務(wù),通過在angular中封裝原生javascript window.settimeout來實(shí)現(xiàn)。
有許多美妙的使用$ term超時(shí),但我們不能濫用它。用$ term超時(shí)來實(shí)現(xiàn)應(yīng)用功能不應(yīng)該是我們的第一個(gè)計(jì)劃。第一個(gè)計(jì)劃應(yīng)該仍然使用angular 的內(nèi)置指令。
以上是本文的全部?jī)?nèi)容。希望對(duì)大家有幫助 s學(xué)習(xí),希望大家多多支持。
標(biāo)簽:
檢查功能循環(huán)觸發(fā)器
了解更多角臟檢測(cè)機(jī)制原理(角臟檢測(cè))相關(guān)內(nèi)容請(qǐng)關(guān)注本站點(diǎn)。
上一個(gè):建筑工程項(xiàng)目管理方法研究
下一個(gè):草籽植被不均勻的原因及防治措施有哪些?

意大利brevini雙聯(lián)齒輪泵ot200 p28+11 d/g31s2
HI96702-HANNA銅離子比色計(jì)
手持式工業(yè)溶解氧儀具有哪些特點(diǎn)
云手機(jī)對(duì)電腦有要求嗎(云手機(jī)是手機(jī)用的還是電腦用的)
橋涵沉降觀測(cè)梁體觀測(cè)標(biāo)怎么設(shè)置?
臭味劑生產(chǎn)價(jià)格便宜
龍眼注意防止沖梢
滴滴沒上車但是扣費(fèi)了怎么回事(滴滴未上車卻扣費(fèi))
合果芋的無(wú)土栽培
win8平板升級(jí)win10教程(平板專用win8系統(tǒng))
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos