2013-04-01 45 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 –