3 回答
TA贡献2039条经验 获得超7个赞
使用QueryList接受的答案对我不起作用。然而,有什么工作是使用ViewChild的setter:
private contentPlaceholder: ElementRef;
@ViewChild('contentPlaceholder') set content(content: ElementRef) {
this.contentPlaceholder = content;
}
一旦* ngIf变为真,就会调用setter
TA贡献1872条经验 获得超3个赞
克服这个问题的另一种方法是手动运行变化检测器。
你先注入ChangeDetectorRef:
constructor(private changeDetector : ChangeDetectorRef) {}
然后在更新控制* ngIf的变量后调用它
show() {
this.display = true;
this.changeDetector.detectChanges();
}
TA贡献1802条经验 获得超4个赞
上面的答案对我不起作用,因为在我的项目中,ngIf在输入元素上。我需要访问nativeElement属性,以便在ngIf为true时关注输入。ViewContainerRef上似乎没有nativeElement属性。这是我做的(遵循@ViewChild文档):
<button (click)='showAsset()'>Add Asset</button>
<div *ngIf='showAssetInput'>
<input #assetInput />
</div>
...
private assetInputElRef:ElementRef;
@ViewChild('assetInput') set assetInput(elRef: ElementRef) {
this.assetInputElRef = elRef;
}
...
showAsset() {
this.showAssetInput = true;
setTimeout(() => { this.assetInputElRef.nativeElement.focus(); });
}
我在聚焦之前使用了setTimeout,因为ViewChild需要一秒钟来分配。否则它将是未定义的。
- 3 回答
- 0 关注
- 1185 浏览
添加回答
举报