Controller之前的AngularJS指令事件

时间:2014-10-13 12:22:02

标签: jquery angularjs angularjs-directive angular-ui

我需要一些帮助来强制在控制器事件之前从指令执行事件。 我的情景是下一个:

我的控制器中有一个像搜索方法那样的输入:

 <input type="text" name="searchText"
  required
  data-ng-model="searchText"
  data-ng-enter="search(searchText)" />

一个全局注册keydown 13(ENTER键)的指令,其中包含下一个代码:

 $document.bind("keydown keypress", function(event) {
                    if (event.which === 13) {
                       //do something
                    }
 }

如果我将光标放入输入并按下回车键,则在全局指令发生之前触发ng-enter。有一些方法可以在控制器之前强制执行指令事件吗?

我尝试使用priority for directive但不是解决方案。

所有的帮助都会得到赞赏。

1 个答案:

答案 0 :(得分:2)

问题是该事件正在冒泡DOM。 input事件将始终在document事件之前触发,因为该事件将始终冒出来。

如果您希望首先触发文档事件,可以指定您希望它在capturing phase运行(注意:如果IE8或更低版本,则不支持)。您可以在.addEventListener函数的第三个参数中指定事件捕获:

function documentKeyEvent(event) {
    if (event.which === 13) {
        //do something
    }
}

$document[0].addEventListener("keydown", documentKeyEvent, true);
$document[0].addEventListener("keypress", documentKeyEvent, true);

Demo Here