Javascript AngularJS:指令导致另一个指令激活,从而导致错误
我有一个部分:Javascript AngularJS:指令导致另一个指令激活,从而导致错误,javascript,angularjs,Javascript,Angularjs,我有一个部分: <div class="data" ng-keydown="handleKeys($event, $index)" ng-focus="handleFocus($event, $index)" contenteditable>{{data.text_content}}</div> 仅使用ng keydown指令,一切都运行得很好,但在添加ng focus指令后,我不断收到错误:[$rootScope:inprog]$apply已经在进行中 如果键是向上/
<div class="data" ng-keydown="handleKeys($event, $index)" ng-focus="handleFocus($event, $index)" contenteditable>{{data.text_content}}</div>
仅使用ng keydown指令,一切都运行得很好,但在添加ng focus指令后,我不断收到错误:[$rootScope:inprog]$apply已经在进行中
如果键是向上/向下箭头,handleKeys实际上会将焦点设置在下一个/上一个div上,因此我的理解是调用handleFocus时$apply for handleKeys仍在进行中,从而导致错误
考虑到我需要在keydown和focus上做一些事情,handleKeys需要设置一些div.data的焦点,有没有办法避免这种情况?您可以使用$timeout为下一个周期安排事件:
$scope.handleKeys = function (event,index){
if (event.which == 38){ //Up
$timeout(function(){
angular.element(event.target).prev().focus();
});
}
if (event.which == 40){ //Down
$timeout(function(){
angular.element(event.target).next().focus();
});
}
};
如果没有$timeout,您的问题就是这个问题,您是对的,当$apply for handleKeys仍在进行中时调用handleFocus,谢谢,成功了!我以为我已经试过了,但显然没有。@stiang:你很好,很高兴它有帮助。