在 Angular 的自定义指令中监听鼠标事件
Listen to mouse events in a custom directive in Angular
我有一个名为 side-menu 的自定义指令,我可以在我的 index.html 中使用它,如下所示。
<side-menu></side-menu>
在指令里面,有一个控制器。该控制器位于单独的文件中 (SidebarController.js)。以下是我的指令的模板文件:
<div class="sidebarContainer" ng-controller="SidebarController as sidebar">
...
</div>
这个控制器监听指令中的鼠标事件。例如,以下是来自控制器的一行:
angular.element('#sidebarContainer ul li').on('mouseleave', 'li.item > i', function ($event){...})
监听指令内列表项上的 mouseleave 事件。但是,我必须将这个控制器放在指令之外,因为它不会让我在指令上创建一个独立的范围。我将 index.html 的布局更改如下:
<div class="sidebarContainer">
<side-menu></side-menu>
</div>
问题是,控制器不再监听指令中的任何内容。所有 DOM 元素仍位于相同位置。但是当我把它放在指令中时,控制器只听它们。我该如何解决这个问题?
首先AngularJs
如果你在controller里面使用DOM操作会不开心。出于这个原因,我们使用 directives
。所以我建议你在指令中使用所有 DOM 操作。
您也可以使用 angular 提供的事件处理程序(例如,在您的情况下为 ng-mouseleave
),而不是 jquery 方式。
此外,独立作用域无法捕获父控制器中定义的方法和变量。为此,您可以使用 $parent
属性.
例如。
<li class="item" ng-mouseleave="$parent.mouseLeft('Item 1')"><i>Item 1</i></li>
您可以查看我为您创建的这个 plunker 代码。
我有一个名为 side-menu 的自定义指令,我可以在我的 index.html 中使用它,如下所示。
<side-menu></side-menu>
在指令里面,有一个控制器。该控制器位于单独的文件中 (SidebarController.js)。以下是我的指令的模板文件:
<div class="sidebarContainer" ng-controller="SidebarController as sidebar">
...
</div>
这个控制器监听指令中的鼠标事件。例如,以下是来自控制器的一行:
angular.element('#sidebarContainer ul li').on('mouseleave', 'li.item > i', function ($event){...})
监听指令内列表项上的 mouseleave 事件。但是,我必须将这个控制器放在指令之外,因为它不会让我在指令上创建一个独立的范围。我将 index.html 的布局更改如下:
<div class="sidebarContainer">
<side-menu></side-menu>
</div>
问题是,控制器不再监听指令中的任何内容。所有 DOM 元素仍位于相同位置。但是当我把它放在指令中时,控制器只听它们。我该如何解决这个问题?
首先
AngularJs
如果你在controller里面使用DOM操作会不开心。出于这个原因,我们使用directives
。所以我建议你在指令中使用所有 DOM 操作。您也可以使用 angular 提供的事件处理程序(例如,在您的情况下为
ng-mouseleave
),而不是 jquery 方式。此外,独立作用域无法捕获父控制器中定义的方法和变量。为此,您可以使用
$parent
属性.
例如。
<li class="item" ng-mouseleave="$parent.mouseLeft('Item 1')"><i>Item 1</i></li>