你是不是也常在想AngularJS $apply, $digest, 和$evalAsync到底有什么差別?這個篇博客中我們將探討一下這三個方法。
AngularJS之所以這么受歡迎,是因為它有很多的處理程序幫我們完成了絕大部分的求值運算。AngularJS讓前端開發(fā)工作變的簡單高效,通過指令我們可以創(chuàng)建html標簽,還可以創(chuàng)建獨立的模塊,AngularJS確實是創(chuàng)建SAP的最好框架之一。
AngularJS的核心之一就是$digset循環(huán),這是AngularJS檢測和重新呈現(xiàn)model和view的變化的方法。在每一個$digset循環(huán)中,檢測列表中的所有的檢測對象都會被執(zhí)行,重新計算綁定到視圖的模型對象,然后又將重新渲染的視圖呈現(xiàn)給用戶。這個過程是影響AngularJS性能的主要部分。
但是很多時候,我們需要在AngularJS的上下文之外對模型進行操作,而這樣的操作AngularJS是無法檢測到的,也就是說它不能更新model并重新呈現(xiàn)視圖。我們有三個方法能個完成這個工作$apply,$digset和$evalAsync,但是在我們不知其所以然的直接調用他們之前,我們需要了解一下為了解決問題我們到底需要影響多少個檢測對象,影響多少層scope。
這里有多種方法可以讓AngularJS執(zhí)行計算,也就是讓AngularJS開啟一個新的$digset循環(huán):
- $apply()
- $timeout()
- $digest()
- $evalAsync()
$apply()
$apply()會觸發(fā)整個應用中的所有scope上的$digset循環(huán)。意思就是,每次我們調用$apply()都會在整個應用的生命周期中開啟一個新的$digset循環(huán)。整個生命周期涉及3個主要任務:
Scope’s $apply() method transitions through the following stages:
- The expression is executed using the $eval() method.
- Any exceptions from the execution of the expression are forwarded to the $exceptionHandler service.
- The watch listeners are fired immediately after the expression was executed using the $digest() method.
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26