3 回答

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果我們?cè)趹?yīng)用程序中大量使用$ apply,則可能會(huì)出現(xiàn)錯(cuò)誤:$ digest已經(jīng)在進(jìn)行中。這是因?yàn)榭梢砸淮芜\(yùn)行一個(gè)$ digest循環(huán)。我們可以通過(guò)$ timeout或$ evalAsync解決它。
$ timeout不會(huì)產(chǎn)生像“ $ digest已經(jīng)進(jìn)行中”之類的錯(cuò)誤,因?yàn)? timeout告訴Angular,在當(dāng)前周期之后,有一個(gè)超時(shí)等待,這樣可以確保摘要周期與$輸出之間不會(huì)發(fā)生任何沖突。超時(shí)將在新的$ digest周期執(zhí)行。
我嘗試在以下位置解釋它們:apply,timeout,digest和evalAsync的比較。
可能會(huì)對(duì)您有幫助。

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
據(jù)我了解,它$timeout
是一個(gè)包裝器,在setTimeout
其周圍隱式調(diào)用$scope.$apply
,這意味著它在角度生命周期之外運(yùn)行,但會(huì)啟動(dòng)角度生命周期本身。我能想到的唯一“陷阱”是,如果您希望結(jié)果可用this $digest
,則需要找到另一種“安全應(yīng)用”的方法(AFAIK僅可通過(guò)訪問(wèn)$scope.$$phase
)。
- 3 回答
- 0 關(guān)注
- 587 瀏覽
添加回答
舉報(bào)