开发者问题收集

ngIf 中未定义的 ViewChild

2019-01-11
5454

如何聚焦 ngIf 中的元素?

页面加载时此 ngIf 为真,但仍然出现未定义的错误:

@ViewChild("currentDaySpentInput") currentDaySpentInput: ElementRef;  
// ...
<div class="spending-input" *ngIf="!spentInputComplete">
    <label>How much did you spend today?</label>
    <input [(ngModel)]="currentDay.spent" (keyup)="onKey($event)" #currentDaySpentInput>
</div>

焦点元素

ngOnOnit() {
    this.currentDaySpentInput.nativeElement.focus();
}

错误:

ERROR TypeError: Cannot read property 'nativeElement' of undefined

我尝试使用此 问题 中建议的 setter,但没有起作用。

2个回答

ViewChild 在 AfterViewInit 挂钩之后可用,而不是在 Onit 上,这就是您收到错误的原因。 ( https://alligator.io/angular/viewchild-access-component/ )

@ViewChild("currentDaySpentInput") currentDaySpentInput: ElementRef; 
  ngAfterViewInit() {
    console.log(this.currentDaySpentInput.nativeElement.focus()); // mayo
  }

它应该修复此问题,如果这不能解决问题,则必须查看代码。

Akshay Rajput
2019-01-11

启动时出现 undefined 的原因是因为模板尚未呈现,并且您的 ViewChild 无法检测到其与视图的附件

要解决此问题,请使用 AfterViewInit ,此处的 @ViewChild 将被解析,并将检查放入覆盖方法中

export class YourComponent implements AfterViewInit {
   @ViewChild() currentDaySpentInput: any;
   ngAfterViewInit(): void {
    // put your logic here
    console.log(this.currentDaySpentInput.nativeElement);
  }
}
John Velasquez
2019-01-11