2013-04-01 41 views
8

我在輸入元素中使用了「ng-model」,並使用chrome檢查器觀察該元素。但是input元素的每個onxxx屬性(包括onchange)都是null。那麼,AngularJS如何捕獲用戶輸入觸發的「onchange」事件?AngularJS如何在內部捕捉像'onclick','onchange'這樣的事件?

+0

你可能想檢查http://stackoverflow.com/questions/9682092/databinding-in-angularjs –

+0

@fastreload謝謝!我剛剛讀過那篇文章,但仍不清楚。根據那篇文章,AngularJS使用$ apply()和$ digest()進行髒檢。但是,誰稱這些功能? 'angular'模塊是否使用類似setInterval()的方式進行輪詢? – firia2000

+0

有幾個事件觀察者發起「摘要」階段,Stewie的答案有一些細節。 –

回答

13

如果在Chrome的事件監聽器選項卡,你檢查標準的文本輸入元素(NG-模型附後),你會看到它有附加兩個事件偵聽器:$destroyinput

角,默認情況下,監聽input事件,並且,如果它不是由瀏覽器的支持,它會回落到​​change事件。

事件綁定jQlite的綁定方法(除非你也有一個完整的jQuery包括,在這種情況下,其綁定方法將接管)。

您可以檢查自己的示例輸入元素位於input [email]指令文檔頁面。

Exact line in Angular source (v1.2.0rc1)負責處理輸入事件。

+0

現在它是完全清楚。謝謝! – firia2000

+1

爲什麼jquery沒有使用val()!!!來激發輸入事件?你還會如何正確地傳播這種改變? – tommybananas

+0

@ snowman4415像這樣:http://stackoverflow.com/a/17110709/1095616 – Stewie

-1

可以使用附加事件偵聽器的任何DOM節點:

node.addEventListener(eventName的,listenerMethod方法,useCapture)

當你node.onchange的方法,使用addEventListener分配之前,你必須將事件監聽器附加到事件「更改」或「單擊」。

參見:https://developer.mozilla.org/en-US/docs/DOM/EventTarget.addEventListener

+1

這個問題是關於特別是angularjs,而不是dom事件處理程序 –

+0

那麼,AngularJS仍然是JavaScript與DOM的權利?所以角度做一些使用DOM的事件監聽器,我不知道角度,但我想事件被附加到文檔元素,他們使用事件冒泡來過濾哪個目標將接收DOM事件。 – KKetch

+0

在基地上,是的,它必須。但事實上,它並不像你「假設」那樣工作。它使用髒檢查模型來查找發生了什麼變化。你可以閱讀更多關於它在http://stackoverflow.com/questions/9682092/databinding-in-angularjs –