-不重复!由于其他问题已经过时。不能重复询问的问题!!!
this.elm.nativeElement.ownerDocument.activeElement
也
document.activeElement
给我足够奇怪的整个身体。我如何才能获得当前关注的元素?
elm =在我的组件的构造函数中绑定的ElementRef的类型。
来自另一个问题:this.renderer.invokeElementMethod也不可调用,因为现在不推荐使用Renderer,并且Renderer2显然不再具有该方法。
编辑:此问题部分回答了此问题:
document.activeelement returns body
在离开旧元素并输入新元素之间, 活动元素确实是文档/主体本身。
答案 0 :(得分:2)
我必须在超时内覆盖“ document.activeElement”或“ this.elm.nativeElement.ownerDocument.activeElement”,以便在下一个角度生命周期中检查活动元素。否则,在焦点更改后立即执行“ X.activeElement”时,您会得到整个正文,因为在输入新元素时,活动元素的确是文档/正文本身。
setTimeout(function() {
X = document.activeElement;
});
答案 1 :(得分:1)
我之前有一个类似的问题。我的问题是我在非表单元素上使用“ tabindex”,但是我需要插入“ onfocus”事件来调用组件操作。
两个选项对我有用:
@Directive({
selector: '[componentFocus]'
})
export class ComponentFocus {
@HostListener('focus')
componentFocus() {
console.log(`component has focus, element:`, this.el);
}
constructor(private el: ElementRef) {
}
}
然后在类似字段集的地方调用
<fieldset tabindex="1" componentFocus>...</fieldset>
<fieldset tabindex="1" on-focus="onFocus($event.target)">...</fieldset>