9

我看到很多关于如何通过创建指令或 HTML 自动对焦在 angularjs 中的输入文件上设置自动对焦的帖子,是否有一种快速简便的方法来设置角度焦点(角度 2、角度 4 等)

4

6 回答 6

20

在您的 html 中添加#nameit以在组件代码中获取其引用。

<input type="text" name="me" #nameit>

然后将自动焦点应用到其中。

  @ViewChild('nameit') private elementRef: ElementRef;

  public ngAfterViewInit(): void {
    this.elementRef.nativeElement.focus();
  }
于 2017-03-17T17:45:01.380 回答
9

Aniruddha Das 的回答在某些情况下效果很好。但是,如果这应用于需要验证的基于模板的表单,您可能会收到以下错误:

ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改。以前的值:“假”。当前值:“真”。

一种解决方案是将 focus() 调用包装在 ngInit() 而不是 ngAfterViewInit() 中。因此,延伸阿尼杜达的回答:

在您的 html 中,将 #namedReference 添加到组件中:

<input type="text"
    placeholder="Your full name"
    name="name"
    ngModel
    #fullName="ngModel"
    required
    #nameit>

然后使用 onNgInit() 对其应用自动对焦:

@ViewChild('nameit') private elementRef: ElementRef;

ngOnInit() {
    this.elementRef.nativeElement.focus();
}
于 2017-06-07T14:51:38.197 回答
1
<input id="name" type="text" #myInput />
{{ myInput.focus() }}

添加{{ myInput.focus() }}到您的模板中。

于 2018-05-17T09:08:59.553 回答
0

这个是为我做的,因为我的输入元素可以根据某些属性显示或隐藏。

模板:

<input #captionElement matInput>

代码:

@ViewChild('captionElement') captionField: ElementRef;

如果项目将显示/隐藏(通过 *ngIf),例如:

<ng-container *ngIf="editModeCaption; then editCaption else viewCaption" >
</ng-container>
<ng-template #editCaption>
  <mat-form-field>
   <mat-label>Image Caption</mat-label>
     <input  #captionElement matInput>
  </mat-form-field>
</ng-template>
<ng-template #viewCaption>
   ...
</ng-template>

其中 editModeCaption 是您的容器(告诉我是否处于编辑模式)组件的属性。不要把它放在 ngAfterViewInit() 上,而是放在 ngAfterViewChecked(AfterViewChecked 接口)上。像这样:

ngAfterViewChecked(): void {
  if (this.editModeCaption) {
    this.captionField.nativeElement.focus();
  }
}
于 2020-09-30T03:56:11.507 回答
0

您可以使用投票最多的答案的示例,但有时您需要将焦点放在 setTimeout 内以进行“异步”调用。在我的情况下,我需要将 setTimeout 放在角度材料的垫自动完成组件的选定过滤器中。

我的代码看起来像这样

   setTimeout(() => this.qtdeRef.nativeElement.focus());
于 2018-03-09T00:32:00.557 回答
-2
<input type="text" #textInput placeholder="something" (focus)="someFunction(textInput.value)"/>

或者

<input type="text" #textInput placeholder="something" (keyup.enter)="someMethod(textInput.value)"/>
于 2017-03-17T15:49:27.953 回答