我需要一些帮助来强制在控制器事件之前从指令执行事件。 我的情景是下一个:
我的控制器中有一个像搜索方法那样的输入:
<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但不是解决方案。
所有的帮助都会得到赞赏。
答案 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);