2015-02-24 93 views
0

我想知道更多關於$ scope.apply()的實時使用情況。 我們可以在控制器中使用$ scope.apply()多少次?例如,我有一些像ng-click(),ng-change(),ng-blur()等事件。所有的事件都在同一個控制器中。對於每一個事件,我應該使用$ scope.apply()?如果是的話,我得到錯誤:

Error: [$rootScope:inprog] [http://errors.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply][1] 
at Error (native) 

我已經在這個論壇上閱讀,取消加$ scope.apply()會解決這個問題。

angularjs $scope.$apply() gives this error: Error: [$rootScope:inprog]

我實現從代碼去除多個$ scope.apply()的相同溶液中。錯誤消失了,但我想知道如何以及爲什麼?

任何人都可以請解釋。

在此先感謝。

回答

4

$scope.apply()是更新DOM觸發,在大多數情況下(如像ng-click,因爲它傳遞到您的控制器觸發的評估被包裹在一個$scope.apply()的DOM的觸發器。你一般不需要撥打電話$scope.apply(),因爲它已經被處理,但是如果您遇到了某些問題未能正確更新,您可以使用$scope.apply()基本上使其更新。爲了防止在應用已經評估時調用apply,您可以執行安全檢查像這樣:

if (!$scope.$$phase) 
    $scope.apply(); 

$$phase是一個角內部屬性y當沒有範圍應用正在進行時爲空/未定義,並且在執行$scope.apply()時具有值。

$scope.apply()通過查找最多子範圍(最內層範圍)並檢查更改,調用手錶等,然後它爬上範圍直到它到達根範圍,因此您可能會認爲它是一個相當沉重的呼叫,應儘可能避免。

+0

這有助於!謝謝 ! – user2598808 2015-02-24 07:35:52

+1

$ scope。$ digest()重量輕 – 2015-12-29 16:55:50