如何自动对焦输入元素?与this问题类似,但与AngularDart不同 . 像这样的东西:
<input type="text" [(ngModel)]="title" [focus] />
//or
<input type="text" [(ngModel)]="title" autofocus />
Angular2是否支持此功能?
最近的问题是this one,但是有没有更短/更容易的解决方案,因为我没有"list of input boxes" . 在提供的链接中使用 *ngFor="#input of inputs"
,但我在控件模板中只有1个输入 .
5 回答
只需在模板内输入后添加 {{ myInput.focus() }} 即可
这是我目前的代码:
用例:
Outdated code (old answer, just in case):
我最终得到了这段代码:
如果我将代码放在
ngOnViewInit
中则不起作用 . 代码也使用最佳实践,因为直接调用元素不是recommended .Edited (conditional autofocus):
几天前我需要条件自动对焦,因为我隐藏了第一个自动对焦元素,我想要聚焦另一个,但只有当第一个不可见时,我结束了这段代码:
Edited2:
Renderer.invokeElementMethod is deprecated和新的Renderer2不支持它 . 所以我们回到原生焦点(例如在DOM-SSR之外不起作用!) .
用例:
autofocus
是一个本机html功能,至少应该用于页面初始化 . 但是它无法与许多角度场景一起使用,尤其是*ngIf
.您可以制作一个非常简单的自定义指令来获得所需的行为 .
上述指令适用于我的用例 .
如何使用
编辑:似乎有一些用例,它可以在
OnInit
生命周期方法中尽早调用焦点 . 如果是这种情况,请改为OnAfterViewInit
.以下指令适用于我使用Angular 4.0.1
像这样用它:
使用OnInit生命周期事件的选项对我不起作用 . 我也尝试在另一个对我不起作用的答案中使用渲染器 .
您可以为input元素分配模板引用变量
#myInput
:让你的组件实现
AfterViewInit
,使用ViewChild
注释获取input元素的引用,并将你的元素集中在ngAfterViewInit
钩子中: