我想了解angularjs的進出。
我遇到$ digest loop,$ watch lists等等,但是我的疑問是當事件在瀏覽器觸發時(按鈕點擊)角度知道它是怎麼回事?在JavaScript中,如果我們訂閱了一個事件,那麼當事件觸發時我們會收到通知。 (請注意,我並不想了解ng-click指令)
我試過谷歌它,但我沒有得到詳細信息。任何網址或書名都很好。
謝謝。
查看源
我想了解angularjs的進出。
我遇到$ digest loop,$ watch lists等等,但是我的疑問是當事件在瀏覽器觸發時(按鈕點擊)角度知道它是怎麼回事?在JavaScript中,如果我們訂閱了一個事件,那麼當事件觸發時我們會收到通知。 (請注意,我並不想了解ng-click指令)
我試過谷歌它,但我沒有得到詳細信息。任何網址或書名都很好。
謝謝。
查看源
大約從範圍生命週期角文檔:
當瀏覽器調用成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);
});
神奇這裏通常發生在ng-click
指令(像ng-mouseenter
,ng-mouseleave
,ng-keypress
等,或一個,如果是相關的指令),該指令簡單地註冊使用相應的事件回調angular's JQLite
(即element.on(event, callback)
)。回調本身通過$scope.$apply
(它啓動摘要循環)在正確的範圍內執行表達式。
如果您要在正常的角度指令之外註冊您自己的事件偵聽器,您需要遵循它們使用的相同模式。
該source code是非常簡單的閱讀,值得看看。
喔..在ng-click指令的編譯函數中,它們連接事件,並從那裏開始啓動他適用。這對我有意義。謝謝。 – Aswathy