有没有办法使用 AngularJS/Angular-UI 在输入控件中设置焦点?
我看到 Angular-UI 有一些 Jq-UI=focus 指令,但我无法让它工作。
我有几个使用 Angular-UI $dialog 服务显示的对话框,并且真的希望每个对话框的第一个输入在显示后获得焦点
有没有办法使用 AngularJS/Angular-UI 在输入控件中设置焦点?
我看到 Angular-UI 有一些 Jq-UI=focus 指令,但我无法让它工作。
我有几个使用 Angular-UI $dialog 服务显示的对话框,并且真的希望每个对话框的第一个输入在显示后获得焦点
我在模板中使用了标准autofocus
属性,并声明了一个简单的指令,以使其适用于页面加载后创建的元素(如您的情况下的对话框)。
app.directive('autofocus', function () {
return {
restrict: 'A',
link: function (scope, element) {
element[0].focus();
}
};
});
事实证明,如果您将它与 Angular-ui $dialog 服务一起使用,您所需要的就是这个:
app.directive('focusMe', function ($timeout) {
return {
link: function (scope, element, attrs, model) {
$timeout(function () {
element[0].focus();
});
}
};
});
html:
<input type="text" focus-me >
如前所述,这仅适用于 Angular-UI $dialog 服务。
在这里实时查看:http: //strengthtracker.apphb.com (单击登录或注册以显示对话框)
你是对的,我已经展示了如何jQuery.fn.focus()
在 DOM 元素上调用 jQuery 的本机方法的演示,因为这就是全部ui-jq
。诀窍是让它在正确的时间多次触发。
ui-jq
已经在 a 中为您执行了该方法$timeout
,但是默认情况下,它仅在创建 DOM 元素时触发一次。为了ui-jq
多次触发,只需添加ui-refresh="someExpression"
并使用一个您知道每次模态打开时都会更改的表达式。如果它在模态框关闭时重新触发也没关系,.focus()
如果 DOM 元素不可见,则不会执行任何操作。
因此,对于 ui-bootstrap 模态,只需将您正在使用的相同表达式放入modal="someExpression"
您应该设置的内容。
AngularJS
提供的最新版本:http ng-focus
: //docs.angularjs.org/api/ng/directive/ngFocus