AngularJS:Directive导致另一个指令激活,导致错误

时间:2014-01-12 00:27:22

标签: 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] $申请已在进行中”。

如果键是向上/向下箭头,

handleKeys()实际上将焦点设置在下一个/上一个div上,所以我的理解是在$ apply for handleKeys()仍在进行时调用handleFocus(),导致错误。

有没有办法避免这种情况,考虑到我需要在keydown和focus上做两件事,而handleKeys()需要设置一些div.data的焦点?

1 个答案:

答案 0 :(得分:0)

您可以使用$ 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();
       });
     }
  };

DEMO

如果没有$ timeout,这个DEMO在您的问题中有确切的问题,并且你正确调用handleFocus()而$ apply for handleKeys()仍在进行中