【问题标题】:How does Angular.js handle event bindings such as "ng-click"?Angular.js 如何处理诸如“ng-click”之类的事件绑定?
【发布时间】:2013-06-05 05:32:54
【问题描述】:

Angular.js 如何处理“ng-click”等事件绑定?

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

【问题讨论】:

    标签: javascript angularjs angularjs-directive


    【解决方案1】:

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

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

    简单地说,有一种机制可以创建一个需要绑定的指令列表,在 $digest 循环期间,如果有变化,浏览器会重新检查 DOM 的变化,并且它会反映到浏览器中。

    这是一个非常简短的解释,你可以在这里找到更多:

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

    【讨论】:

      【解决方案2】:

      ng-[eventname]-directives 通过 element.bind 工作,其中元素是 jQuery/jqLite element。这个bind method 通过调用 element.addEventListener(至少在 Chrome 中)来工作。通过检查 DOM,您不会看到该事件侦听器。

      【讨论】:

      • 您实际上可以在“事件侦听器”下的开发工具右侧面板底部看到事件侦听器
      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2015-04-02
      相关资源
      最近更新 更多