角度事件冲突

时间:2013-07-10 13:15:09

标签: angularjs angularjs-directive angularjs-scope

我有一个angularjs应用程序,它使用带有隔离范围的指令。此指令的一个不必要的副作用是连接到同一元素的事件处理程序不再触发。这个Plunkr说明了:

http://embed.plnkr.co/aG3X8uCGxQmnM1dJaQmJ/preview

在app.js中,如果您注释掉以下行,则mouseenter,mouseleave和dblclick事件处理程序将开始触发相关的用户操作:

scope: { data: '=source' },

有人可以解释这个效果吗?它是一个bug还是设计?如何使控制器上的事件处理程序以我想要的方式触发。

1 个答案:

答案 0 :(得分:1)

您设置指令的方式会创建隔离范围,该范围不会从父范围继承,因此对指令元素不可见。

解决这个问题的一种方法是将指令移到像这样的子元素

<div ng-dblclick="dblclick()" ng-mouseenter="mouseenter()" ng-mouseleave="mouseleave()">
      <span my-directive source="getData()">Some content</span>
    </div>

请参阅此plunker