Angular.js如何处理事件绑定,例如" ng-click"?
如果我使用Chrome开发工具检查DOM中的HTML输出,我只会看到2个类添加到具有" ng-click"指令," ng-scope"和" ng-binding"。 Angular如何绑定到DOM来拦截这些?它是否附加到最顶层的元素,并将内存映射事件中的大对象保存到它们注册的DOM元素,并使用事件冒泡?或其他什么?
答案 0 :(得分:5)
AngularJS进行脏检查,每次AngularJS找到一个指令时,它会设置$ watch来查看更改。
$ watch列表是一组表达式,自上次迭代后可能已更改。如果检测到更改,则调用$ watch函数,该函数通常使用新值更新DOM。一旦Angular $ digest循环完成,执行就会离开Angular和JavaScript上下文。接下来是浏览器重新渲染DOM以反映任何更改。
简单地说,有一个机制可以创建一个需要绑定的指令列表,在$ digest循环中,如果浏览器重新呈现DOM并且它将会发生更改,则将检查列表的更改被反映到浏览器中。
这是一个非常简短的解释,你可以在这里找到更多:
答案 1 :(得分:0)
ng- [eventname] -directives的工作方式是element.bind
,其中element是jQuery / jqLite element。这个bind method通过调用element.addEventListener(至少在Chrome中)来工作。您不会通过检查DOM来看到eventlistener。