在inputVisibleIfThisIsTrue = true
之后未定义输入元素,因为它位于ngIf
内,我可以使用延迟,但是如果使用过渡和效果怎么办,我不想担心延迟多少时间设置为。
if (this.something) {
this.inputVisibleIfThisIsTrue = true;
this.input.nativeElement.focus(); // this.input is undefined because ngIf takes time
}
那么,this.input.nativeElement.focus()
准备好了,我怎么只能使用ngIf
?有观察者可以订阅的事件吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
从您对Korfoo答案的评论来看,我认为您正在做的是:
if (this.something) {
this.inputVisibleIfThisIsTrue = true;
if (this.input !== undefined) {
this.input.nativeElement.focus();
}
}
您可以通过以下操作进一步简化它:
if (this.something) {
this.inputVisibleIfThisIsTrue = true;
this.input && this.input.nativeElement.focus();
}
答案 2 :(得分:0)
在条件更改后,我会直接使用setTimeout。
答案 3 :(得分:0)
向其中添加模板变量:<your-component-name #var>
使用@ContentChild
查询该变量:
@ContentChild('var', { read: ElementRef }) set _method(el: ElementRef) {
// the component has been initializated, you can now access the variable el
}
此解决方案与AfterViewChecked
之间的区别在于,该解决方案还适用于在运行时添加的动态注入的组件或元素,并且您确定仅当那个元素更改时,该方法才会执行