angular - 聚焦第一个无效输入
问题描述
我需要关注单击按钮后表单的第一个无效输入。我需要在<form>
. 怎么触发?。堆栈闪电战
HTML
<form focusInvalidInput [formGroup]="form">
<label for="first">First Name</label>
<input formControlName="first" />
<label for="last">Last Name</label>
<input formControlName="last" />
<br />
</form>
<button (click)="submit()">submit</button>
零件
constructor(private formBuilder: FormBuilder) {
this.form = this.formBuilder.group({
first: ['', Validators.required],
last: ['', Validators.required],
});
}
submit() {
if (this.form.valid) {
console.log(this.form);
}
}
解决方案
使用exportAs您可以将公共方法公开给您的模板
import { Directive, HostListener, ElementRef } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { FormGroup } from '@angular/forms';
@Directive({
selector: '[focusInvalidInput]',
exportAs: 'focusInvalidInput'
})
export class FormAutoFocus {
constructor(private el: ElementRef) { }
public focus():void{
const invalidControl = this.el.nativeElement.querySelector('.ng-invalid');
console.log("test", invalidControl);
if (invalidControl) {
invalidControl.focus();
console.log("test");
}
}
}
现在我们可以在模板中的任何位置访问 FormAutoFocus 实例
<form focusInvalidInput #focusInput="focusInvalidInput" [formGroup]="form">
<label for="first">First Name</label>
<input formControlName="first" />
<label for="last">Last Name</label>
<input formControlName="last" />
<br />
</form>
<button (click)="submit();focusInput.focus()">submit</button>
推荐阅读
- php - Wordpress PHP从表中选择行的正确方法
- visual-studio-code - 如何使用 es5 和 Visual Studio Code 获取外部 JavaScript 库的智能感知
- c# - 如何让玩家朝着unity3d的方向走
- r - 库存少于 10 个月的值的平均值
- ios - 在不使用 xcode 的情况下,在 mac 中将 lldb 用于 iphone 项目
- javascript - 如何将键值对数组转换为以第一个数组的值作为键的对象?
- odoo - 如何在 Odoo 11 Enterprise 中为选定帐户设置“管理数据库”按钮?
- loops - 超出内存限制 - Python
- flatpickr - Flatpickr 时间格式操作
- regex - Bash if 语句检查 1 个字母和 2 个数字