angular - 如何专注于 Angular 中的输入

标签 angular typescript

<分区>

这应该很简单,但我找不到解决方案,我能在 SO 上找到的最接近的答案是:How do I programmatically set focus to dynamically created FormControl in Angular2

然而,这比我的要求更复杂。我的很简单。我在模板中有这样的输入:

<div *ngIf="someValue">    
    <input class="form-control" #swiper formControlName="swipe" placeholder="Swipe">
</div>

(注意,它在 ngx-boostrap form-control 组中,但我很确定这不重要)

我有一个按钮,单击它会调用以下函数:

onClick() {
    this.renderer.invokeElementMethod(this.swiper.nativeElement, 'focus')
}

目标是单击按钮时,我的输入元素获得焦点。这是我的其余部分(相关部分):

import { Component, ElementRef, ViewChildren, Renderer } from '@angular/core';
import { MyService } from wherever/my/service/is

export class MyClass {
    @ViewChildren('swiper') input: ElementRef;
    someValue: any = false;

    constructor(private renderer: Renderer, service: MyService) {
       this.service.getSomeData().subscribe(data => {
          this.someValue = true;
       }
    }

    onClick() {
        this.renderer.invokeElementMethod(this.swiper.nativeElement, 'focus');
    }
}

我得到的错误是:

ERROR TypeError: Cannot read property 'focus' of undefined
at RendererAdapter.invokeElementMethod (core.js:12032)
etc...

有什么想法吗?

( Angular 5 顺便说一下)

请注意,我编辑了代码以更准确地反射(reflect)实际发生的情况,我认为可能存在一些同步问题。

最佳答案

您正在使用返回 QueryListViewChildren 您需要使用 ViewChild 并且您的代码应该可以工作。

export class MyClass {
    @ViewChild('swiper') swiper: ElementRef;

    constructor(private renderer: Renderer) {}

    onClick() {
        this.swiper.nativeElement.focus();
    }
}

关于angular - 如何专注于 Angular 中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49927624/

相关文章:

angular - 在 Angular 5 中将数据从父级传递给第 n 个子级

由于某种原因没有出现 Angular 对话窗口

css - 展开时具有可展开行背景颜色的 Angular Material 表

Angular2 测试 "Cannot find name ' HTMLElement'"

node.js - 在 Express js 中引导后获取连接

angular - 显示在 Angular 5 中作为 Blob 对象接收的图像

angular - 连接两个可观察量并删除重复项

typescript - 在 APIGatewayProxyEvent 中,哪个字段会给我 URL?

javascript - 在 Angular 2/TypeScript 中将 pdfMake 与数据输入一起使用

html - 如何使用 ts 中的变量作为 HTML 文件中的标记名?