什麼時候應該使用$scope.$apply()

翻譯自:When to use $scope.$apply()

AngularJS對JS原生的異步事件進行了封裝:

  • Events => ng-click
  • Timeouts => $timeout
  • jQuery.ajax() => $http

這是一個傳統的異步函數,僅僅在最後調用了$scope.$apply() 來通知AngularJS異步事件正在發生。

$scope.$apply()應該在儘可能接近異步事件綁定的地方被調用。

$scope.$apply() should occur as close to the async event binding as possible.

不要隨意的在你的代碼中使用它,如果你使用了if (!$scope.$$phase) $scope.$apply(),因爲你沒有處在調用棧的高層。

儘可能使用AngularJS的服務來代替原始的JS。如果你在創建一個AngularJS服務(例如爲套接字創建服務),你應該在觸發回調的任何位置都使用$scope.$apply()

注:不知道翻譯的對不對,附上後兩段的原文:

Do NOT randomly sprinkle it throughout your code. If you are doing
if (!$scope.$$phase) $scope.$apply() it’s because you are not high enough in the call stack.

Whenever possible, use AngularJS services instead of native. If you’re creating an AngularJS service (such as for sockets) it should have a $scope.$apply() anywhere it fires a callback.

注:其實我沒有太明白作者想要表達的意圖,個人覺得下面這篇文章寫的更詳細且更符合實際:深入理解ANGULAR中的$APPLY()以及$DIGEST()

還可關注微信公衆號
AngularJS公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章