如何在 Angular 6 中单击事件时在 matInput 元素上设置自动焦点?

2024-03-26

与 Google 登录页面类似,我希望在单击事件后自动聚焦于输入元素。我尝试过 @ViewChild('id') 和 document.getElementId('id')。两者都不起作用。它始终为 null 或未定义。我怎样才能实现这个目标?

       <mat-form-field class="example-full-width col-sm-4">
        <input autofocus id="login-username" matInput 
       formControlName="userName" minlength="5" maxlength="20" 
       name="userName" placeholder="Username" required #input> 
      </mat-form-field>

        <div class="col-sm-12">
           <button (click)="changeView()" type="button" mat-raised-
             button color="primary">Next</button>
          </div>

         <mat-form-field class="example-full-width col-sm-4" 
          #passwordInput>
        <input autofocus type="password" matInput 
       placeholder="Password" minlength="5" maxlength="20" 
       formControlName="userPassword" #passwordInput>  
      </mat-form-field>

不幸的是,并非每个解决方案都能在渲染时始终与自动对焦 matInput 配合使用。这是我尝试过的:

  • HTML autofocus属性
  • JS input.focus()
  • cdkFocusInitial from @angular/cdk

上述所有方法都可能有效,但在某些情况下它们似乎会被破坏。

What 始终如一地 and always作品正在使用高级 APImatInput。这是使用这种方法的简单指令:

import { Directive, OnInit } from '@angular/core';
import { MatInput } from '@angular/material/input';

@Directive({
  selector: '[matInputAutofocus]',
})
export class AutofocusDirective implements OnInit {

  constructor(private matInput: MatInput) { }

  ngOnInit() {
    setTimeout(() => this.matInput.focus());
  }

}

需要超时来延迟聚焦元素,因为 matInput 在创建时尚未正常运行。用法:

<mat-form-field>
  <input type="text" matInput matInputAutofocus>
</mat-form-field>

当然,命名选择器matInputAutofocus是危险的,因为材料本身有一天会得出这个解决方案。使用它需要您自担风险,或者仅使用您的前缀重命名(推荐)。

聚焦并同时选择输入值

锦上添花的是添加了预选择输入内容的可能性(这在大多数情况下更加用户友好),这稍微改变了实现:

import { Directive, OnInit } from '@angular/core';
import { MatInput } from '@angular/material/input';
    
@Directive({
  selector: '[matInputAutofocus]',
})
export class AutofocusDirective implements OnInit {

  @Input()
  autofocusSelectValue = false;

  constructor(
    private matInput: MatInput,
    private elRef: ElementRef<HTMLInputElement>,
  ) { }

  ngOnInit(): void {
    setTimeout(() => {
      this.matInput.focus();

      if (this.autofocusSelectValue) {
        this.elRef.nativeElement.setSelectionRange(0, this.elRef.nativeElement.value.length);
      }
    });
  }

}

将其用作:

<mat-form-field>
  <input type="text" matInput matInputAutofocus [autofocusSelectValue]="true">
</mat-form-field>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Angular 6 中单击事件时在 matInput 元素上设置自动焦点? 的相关文章

随机推荐

  • 为什么Dictionary没有AddRange?

    标题已经足够基本了 为什么我不能 Dictionary
  • 如何根据当前平台跳过 xUnit 中的特定测试

    我有一个在 Windows 上构建的程序集 我想在 Linux 中的 mono 上运行 xUnit 测试 然而 我发现虽然其中 400 个测试可以 按顺序 运行 但某些测试要么挂起 xUnit 运行程序 要么完全崩溃 I don t car
  • 向 monaco 编辑器提供类型提示

    我正在尝试使用 Monaco 编辑器向 javascript 编辑器提供智能感知 代码补全 该代码必须是有效的 javascript 而不是 typescript 假设一些用户输入了这样的脚本 function onMyEvent even
  • PHP 中的安全用户图像上传功能

    我正在为我的网站实现一个基于用户的图像上传工具 系统应允许任何用户仅上传 JPEG 和 PNG 文件 当然 我担心安全性 所以我想知道许多比我聪明的人对以下允许上传的检查有何感受 1 首先将 PHP 中允许的文件扩展名列入白名单 仅允许 P
  • WCF 不序列化所有属性

    我正在使用已作为 VS2010 中的服务引用导入的 SOAP 服务 我使用服务提供的请求对象来调用其中一项服务 我遇到的问题是 并非对象的所有属性都被序列化 或者不是通过线路发送 请求对象如下所示 var serviceRequest ne
  • CountIf 与过滤后的数据

    我正在研究一种方法来计算数据列中零的数量 即使数据被过滤 我找到了以下解决方案 SUMPRODUCT SUBTOTAL 3 OFFSET B2 B18 ROW B2 B18 MIN ROW B2 B18 1 ISNUMBER SEARCH
  • 使用 PHP 获取目录的层次结构

    我正在尝试查找指定目录下的所有文件和文件夹 例如我有 home user stuff 我想回来 home user stuff folder1 image1 jpg home user stuff folder1 image2 jpg ho
  • Python“for in”循环打印列表中的最后一项

    最近我了解了列表和for循环 以及命令 pop 指示并删除列表中的最后一项 所以我尝试编写一段代码来一项一项地删除列表中的最后一项 直到只剩下一项 代码是 list A a b c d e f g h i j for i in list A
  • Javascript 缩小并插入分号

    是否有任何 Javascript 压缩器 压缩器可以根据需要插入分号 或者 可以处理不使用分号的源代码 我已经开始使用一个非常棒的库 但开发人员认为分号是 不必要的混乱 几年前 当我遇到类似的情况时 我似乎记得解决方案本质上是 越多越好 首
  • 如何说服我的同事不要使用数据集进行企业开发(.NET 2.0+)

    与我一起工作的每个人都痴迷于以数据为中心的企业开发方法 并且讨厌使用自定义集合 对象的想法 说服他们的最佳方法是什么 以身作则 谨慎行事 任何更强的东西只会让你与团队的其他成员疏远 请记住考虑他们可能发现了您错过的东西 成为团队的一员意味着
  • 没有名为“sklearn.utils.线性_分配_”的模块

    I am trying to run a project from github https github com cfotache pytorch objectdetecttrack every object counter applic
  • 当我将用户控件拖到设计视图上时,Visual Studio 引发错误

    我有两个用户控件 其中一个是一个简单的图片夹 其中有一个复选框 另一个充当容器 而不是包含前一个控件的集合 So a 水平图片滚动可以有很多可选图片控制 我将粘贴每个控件的小代码 First 水平图片滚动 using System usin
  • 按 API 密钥使用 AWS API Gateway

    如何通过 API 密钥从 AWS API Gateway 获取使用指标 例如使用计数器 使用日志等 我目前正在发送x api key到我的集成端点进行手动日志记录 我不想这样做 而是让 AWS API Gateway 为我测量和报告此指标
  • 使用 glfw3 glew 和 opengl 在 Visual Studio 社区中获取访问冲突异常

    我遇到这个问题已经有一段时间了 但出于我的爱 我无法找到解决方案 我想渲染一个简单的三角形 但在编译程序时 我不断在 Visual Studio 中获得此输出 注意 gt 我不认为这不是链接问题而是其他问题 我已经检查了我的链接器无数次 一
  • 对数据进行排序以在 python 中从高到低呈现条形图

    我有很多出现的数字 想将它们绘制在条形图 如直方图 中 我已经让图表正常工作 但它是按照我输入值的顺序排列的 而不是从最高到最低的顺序 这正是我想要的 这是到目前为止的代码 phenos 128 20 0 144 4 16 160 136
  • 从 C# DbCommand 将 NULL 插入 SQL DB

    DbParameter param comm CreateParameter param comm CreateParameter param ParameterName StaffId if string IsNullOrEmpty ac
  • 使用 Grok for Logstash 解析 Apache2 错误日志

    我试图解析我的 apache2 错误日志 但遇到了一些麻烦 它似乎与过滤器不匹配 我很确定时间戳部分是错误的 但我不确定 而且我真的找不到任何文档来解决它 另外 有没有办法获取其中的内容fields errmsg to me message
  • Objective-c 中的大括号

    Note 我的问题是基于检查后this https stackoverflow com questions 9704083 unnecessary curly braces in c以及它的答案 在一些更大的方法中 有些代码您只想在一段时间
  • 部分分支或部分合并或其他方式来帮助我同步点文件?

    我不知道如何使我的要求的标题简短 如果没有意义 抱歉 我在这里解释一下 许多人将他们的点文件放在 bitbucket 或 github 上 以方便以后的安装或配置 在不同的电脑上同步 我做了同样的事情 但是我想做一些特别的事情 我不确定 m
  • 如何在 Angular 6 中单击事件时在 matInput 元素上设置自动焦点?

    与 Google 登录页面类似 我希望在单击事件后自动聚焦于输入元素 我尝试过 ViewChild id 和 document getElementId id 两者都不起作用 它始终为 null 或未定义 我怎样才能实现这个目标