html - 无法在 Angular 中以编程方式将焦点设置在输入框上
问题描述
我正在尝试遵循建议,并在我的组件中的输入控件上设置了一个标记,如下所示。
<span (click)="onEditClick()"
[class.hidden]="editing">{{value}}</span>
<input #input
value="{{value}}"
[class.hidden]="!editing">
我注意到单击跨度会隐藏它并显示输入,但需要额外单击才能使输入控件真正聚焦于编辑。我试图将其集中如下。
@ViewChild("input") input: ElementRef;
onEditClick() {
this.editing = true;
this.input.nativeElement.focus();
}
它不起作用,所以我验证了本机元素已设置并符合我的预期。它做了。而且由于控制台中没有错误,我有点不知道如何进一步诊断它。
我怀疑我遗漏了一些相当基本的东西,这些东西很容易从提供的描述中推断出来。
解决方案
问题是当您尝试设置焦点时输入元素仍然隐藏。要确保在设置editing
属性后输入元素变得可见,请通过调用强制更改检测ChangeDetectorRef.detectChanges()
:
onEditClick() {
this.editing = true;
this.changeDetectorRef.detectChanges();
this.input.nativeElement.focus();
}
请参阅此 stackblitz以获取演示。
推荐阅读
- python - Django mptt渲染项关联到父类和子类
- newman - Azure DevOps 上的 Newman CLI 抛出连接 etimedout
- javascript - 如何将计划的 cron 引用存储在数据库中,以便将来在节点 js 中停止该 cron?
- android-studio - 为 Google VR SDK 实现 Exoplayer
- image - 图片未加载到 Github 页面
- java - 如何在 android 共享首选项中保存远程通知计数
- node.js - 从对象数组推送到猫鼬模式
- python - 使用 BeautifulSoup 检查字符串是否在链接列表中
- printing - 使用 return 和 print 关键字时的输出差异
- javascript - 在 javascript 中使用 while 循环有什么副作用?