Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:指令导致另一个指令激活,从而导致错误_Javascript_Angularjs - Fatal编程技术网

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:你很好,很高兴它有帮助。