我需要在搜索后自动将焦点添加到表格的第一行,因为我具有允许箭头键导航向上/向下移动结果表的功能。
我有一个值($ scope.firstItem),我在检索到一些搜索结果后在控制器中进行了设置。所以我可以设置$ watch函数,然后在指令中触发一些代码。
在我的控制器中:
redirectTo
在我的指令中:
children
$ watch功能正在运行,而且' info'正被添加到第一行,这证明上下文是正确的,但focus()不起作用。
我没有使用焦点()而是尝试过:
...
$scope.firstItem = data[0];
....
但是我收到一条错误,说[$ rootScope:inprog] $ apply已在进行中。我想这是因为Angular没有完成它做的任何事情并且无法创建事件。
任何想法我需要做些什么来实现这个目标?我是以错误的方式接近这个吗?甚至可以自动关注表格行吗?
编辑:我已经尝试将焦点移动到页面上的其他元素(另一个文本框),这很好用。它只是不想专注于表格行。EDIT2:我尝试添加一个超时功能,现在正在工作并专注于桌子,尽管这显然不可靠!但它确实表明正在发生其他事情,并解释了为什么我的原始代码不起作用。是否有一个事件,我可以挂钩,一旦Angular完成做任何阻止我执行焦点方法的操作?
module.exports = function(){
return function(scope, element, attrs) {
scope.$watch('$parent.firstItem', function(oldValue, newValue){
var firstTableRow = element[0].children[0].children[0];
if ( firstTableRow !== undefined ) {
firstTableRow.classList.add('info');
firstTableRow.focus(); // Todo: Not focusing, need to find out why
}
});
};
};