angular $apply()以及$digest()講解1

來源:互聯網
上載者:User

標籤:

一些知名的批評和缺陷。他們都涉及到$digest loop(更新周期)中一個很常見的問題:如何在Angular之外更新$scope?

在哪調用 $apply?

更佳的做法是確保你是在$digest loop之外時調用$apply,比如在"link"指令(directive)響應函數內部使用。

也就是說,只能在$controller之外調用$apply,這樣它就可以訪問到HTML或其他controller控制器的聲明代碼 - 比如apply調用link指令並觸發相應功能,這時侯是肯定在$digest loop之外的

如何處理AngularJS之外拋出的錯誤?

$scope.$apply()接收一個函數或Angular運算式字串,並執行它,然後調用 $scope.$digest()來更新所有綁定或偵聽者。

如果你的代碼是不是包裹在函數中傳遞給$apply,它拋出了一個錯誤,該錯誤在AngularJS之外拋出,這意味著在你的應用中的錯誤處理機制無法處理它。$apply不僅僅執行你的代碼,它內部的try / catch語句讓你的錯誤總是能被捕捉到,並且$digist是最後的保障,它意為著即使一個錯誤拋出,它仍能運行。這是相當不錯的。

因此,我們應該將表述改為在Angular之外且在$apply之內更新$scope。

總結

希望您現在瞭解應該何時以及如何使用$apply()。如果你只需要AngularJS為您提供的功能,那您用到它的機率並不高。但是,如果你寫自訂指令,並且直接操縱DOM元素,理解它是很有必要的。

angular $apply()以及$digest()講解1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.