我在AngularJS指令中创建了一个输入元素:
<span ng-repeat="phrasePart in phraseParts">
{{phrasePart}}<input ng-attr-id="{{ 'phrasePart-' + $index }}" ng-if="!$last"/>
</span>
我想要第一个输入元素,即(<input id="phrasePart-0" />
获得焦点,所以我用jQuery做这个:
$(function () {
$("#phrasePart-0").focus();
});
但是,此代码确实将焦点设置在直接在HTML中的输入元素中,而不是由AngularJS呈现。
答案 0 :(得分:2)
更多&#39; Angular&#39;这样做的方法是使用指令。
然后将该指令应用于作为类的第一次出现
刚检查过这个。情况并非如此,因为ng-class不会为angular指令重新编译dom元素。
相反,这可能是一个更可靠的解决方案: http://jsfiddle.net/HB7LU/9958/
.directive("focusme", function(){
return {
scope:{
focusme:"="
},
link:function(scope, element, attrs, $timeout){
if (scope.focusme){
element[0].focus();
}
}
}
})
和HTML
<span ng-repeat="phrasePart in phraseParts">
{{phrasePart}}<input ng-attr-id="{{ 'phrasePart-' + $index }}" ng-if="!$last" focusme="$first" />
</span>
答案 1 :(得分:2)
使用,$ timeout
看看这个小提琴
var myApp = angular.module('myApp',[]);
function myfunc($scope, $timeout)
{
$scope.phraseParts=[1,2,3,4,5,6];
$timeout(function()
{
$("#phrasePart-2").focus();
});
}
答案 2 :(得分:0)
使用angularjs的$ timeout服务。
在摘要周期完成后将调用$timeout(function () {
$("#phrasePart-0").focus();
});