专注于ng-repeat生成的输入

HTML代码

角度代码

  $scope.data = { forms: [] }; jQuery(document).ready(function() { setTimeout(function() { jQuery('#search_0').focus(); }, 500); }); 

上面的代码有效,但需要额外的setTimeout。 有没有更好的方法等待生成表单然后执行focus()?

第一个Angular规则:不要触摸指令范围之外的DOM。

ngRepeat第一个输入元素可以使用自定义指令聚焦,该指令将使用ngRepeat自动提供的$first范围变量:

PLUNKER

 app.directive('focusedOn', [ '$timeout' ,function($timeout) { return function($scope, $element, $attrs) { function focus(){ $timeout(function(){ $element.focus(); }, 20); } if(_($attrs.focusedOn).isEmpty()){ return focus(); } $scope.$watch($attrs.focusedOn, function(newVal){ if(newVal){ focus(); } }); }; } ] ); 
 

注意:没有$ timeout,它可能会或可能不会工作。