专注于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,它可能会或可能不会工作。