4

Angular.js 如何处理诸如“ng-click”之类的事件绑定?

如果我使用 Chrome 开发工具检查 DOM 中的 HTML 输出,我只会看到 2 个类添加到具有“ng-click”指令、“ng-scope”和“ng-binding”的元素中。Angular 如何绑定到 DOM 来拦截这些?它是否附加到最顶层的元素,并在内存中保留一个大对象,将事件映射到它们注册到的 DOM 元素,并利用事件冒泡?或者是其他东西?

4

2 回答 2

5

AngularJS 会进行脏检查,每次 AngularJS 找到一个指令时,它都会设置一个 $watch 来查看更改。

$watch 列表是一组自上次迭代以来可能已更改的表达式。如果检测到更改,则调用 $watch 函数,该函数通常使用新值更新 DOM。一旦 Angular $digest 循环完成,执行就会离开 Angular 和 JavaScript 上下文。随后浏览器重新渲染 DOM 以反映任何更改。

简单地说,有一种机制可以创建一个需要绑定的指令列表,在 $digest 循环期间,如果有更改,则将检查列表是否有更改,浏览器会重新渲染 DOM,并将其反映到浏览器。

这是一个非常简短的解释,您可以在此处找到更多信息:

http://docs.angularjs.org/guide/concepts#runtime

于 2013-06-05T07:54:11.240 回答
0

ng-[eventname]-directives 通过执行 a 来工作element.bind,其中 element 是一个 jQuery/ jqLit​​e 元素。此绑定方法通过调用 element.addEventListener(至少在 Chrome 中)来工作。通过检查 DOM,您不会看到该事件侦听器。

于 2013-06-05T05:46:35.703 回答