2016-03-07 47 views
0

我想了解angularjs的進出。

我遇到$ digest loop,$ watch lists等等,但是我的疑問是當事件在瀏覽器觸發時(按鈕點擊)角度知道它是怎麼回事?在JavaScript中,如果我們訂閱了一個事件,那麼當事件觸發時我們會收到通知。 (請注意,我並不想了解ng-click指令)

我試過谷歌它,但我沒有得到詳細信息。任何網址或書名都很好。

謝謝。

查看源

回答

0

大約從範圍生命週期角文檔:

當瀏覽器調用成JavaScript代碼執行 角執行上下文,這意味着角不知情的 模型修改之外。爲了正確處理模型修改, 執行必須使用$ apply 方法進入Angular執行上下文。僅適用於在$ apply 方法內執行的模型修改將由Angular正確解釋。例如,如果 指令偵聽DOM事件,如ng-click,則它必須評估$ apply方法中的 表達式。

爲了確保角度評估$scope修改,您需要使用內置的處理程序:ng-click$timeout等執行處理後,角將確保執行髒檢查和更新DOM如有必要。 $scope.$apply()被自動調用。

在其他情況下,使用不帶角的相關處理程序時:setTimeout()document.body.addEventListener()等開發商應該照顧他自己弄髒檢查,通過手動調用$scope.$apply()在處理程序。

例如:

1)自動髒檢查由角(推薦的和正確的方式)

angular.module('App').controller('Ctrl', function($timeout) { 
    $scope.myText = 'Initial text'; 
    $timeout(function() { 
    $scope.myText = 'Initial text after 1 second'; 
    //$scope.$apply() is called automatically 
    }, 1000); 
}); 

2)手動評估的範圍改變

angular.module('App').controller('Ctrl', function($timeout) { 
    $scope.myText = 'Initial text'; 
    setTimeout(function() { 
    $scope.myText = 'Initial text after 1 second'; 
    $scope.$apply(); // should be called manually 
    }, 1000); 
}); 
0

神奇這裏通常發生在ng-click指令(像ng-mouseenterng-mouseleaveng-keypress等,或一個,如果是相關的指令),該指令簡單地註冊使用相應的事件回調angular's JQLite(即element.on(event, callback))。回調本身通過$scope.$apply(它啓動摘要循環)在正確的範圍內執行表達式。

如果您要在正常的角度指令之外註冊您自己的事件偵聽器,您需要遵循它們使用的相同模式。

source code是非常簡單的閱讀,值得看看。

+0

喔..在ng-click指令的編譯函數中,它們連接事件,並從那裏開始啓動他適用。這對我有意義。謝謝。 – Aswathy