我遇到了以下问题:我想专注于输入。但是我有一个在页面加载时触发的微调器,只有在完成某些http请求时才会隐藏它。此外,所有输入都被禁用,直到请求未完成。所以它看起来像这样:
<fieldset ng-disabled="!noPendingRequests">
...
<input id="input-to-focus-on" uib-datepicker-popup="MM/dd/yyyy" type="text" ng-model="startDate" ... />
<spinner ng-hide="noPendingRequests"></spinner>
</fieldset>
Spinner是一个自定义的Angular指令。需要在#input-to-focus-on
输入上自动对焦,但它不起作用。在使用$q.all
解析所有http请求后,我试图集中注意力。但这也行不通。我想这是因为$q
中的回调在输入启用之前被触发。我也试过像这样的手动启用:
$q.all(somePromises).then(function() {
angular.element('#input-to-focus-on')[0].disabled = false;
angular.element('#input-to-focus-on')[0].tabIndex = 1;
angular.element('#input-to-focus-on').focus();
});
我不知道该怎么做,并希望得到任何帮助。先谢谢你,伙计们!
答案 0 :(得分:2)
尝试将焦点调用包装在$timeout
块中。
$timeout(function () {
angular.element('#input-to-focus-on').focus();
});
答案 1 :(得分:2)
试试这个:
$q.all(somePromises).then(function() {
$timeout(function () {
angular.element('#input-to-focus-on')[0].focus();
});
});
另外,请确保将$ timeout注入控制器。