angular - 如何等到用户离开输入框然后在 Angular 中运行 Method
问题描述
我正在为输入框调用一个方法来检查用户输入的电子邮件是否存在,我的问题是用户输入的每个字符都会运行该方法,我想等到用户退出输入所以我运行该方法一次。
这是我尝试过的代码 - 模糊在这里不起作用。
这是 HTML:
<input
formControlName="emailWork"
label="Work Email"
type="text"
(blur)="onInputblur()"
[error]="hasError('emailWork', 'required') || hasError('emailWork', 'email')"
errorMessage="Please enter a valid email address." />
<span class="error-label"
*ngIf="addUserForm.get('emailWork').hasError('usernameTaken')">Email already exists
</span>
这是我在 Angular ts 文件中的表格:
constructor(private fb: FormBuilder) {
this.addUserForm = this.fb.group({
firstName: ['', [Validators.required]],
lastName: ['', [Validators.required]],
emailWork: ['', [Validators.email, Validators.required], this.emailValidator()]
});
}
这是模糊的:
public isBlured: boolean = false; (at the top)
public onInputblur(): void {
this.isBlured = true;
setTimeout(() => {
this.emailValidator();
}, 250);
}
这是检查电子邮件是否存在的方法:
private emailValidator(): AsyncValidatorFn {
return (control: AbstractControl): Observable<any> => {
return this.service.doesUserNameExist(control.value).pipe(
debounceTime(500),
map(exists => (!exists ? null : { usernameTaken: true }))
);
};
}
解决方案
您可以updateOn
为该字段设置选项
this.addUserForm = this.fb.group({
firstName: ['', [Validators.required]],
lastName: ['', [Validators.required]],
emailWork: ['', {
validators: [Validators.email, Validators.required],
asyncValidators: [this.emailValidator()],
updateOn: 'blur'
}]
});
推荐阅读
- mongodb - mongoose 的 open/connected 和 close/disconnected 事件的区别
- python - 在 Python 中使用 c 风格的结构
- python - _generate_jwt_token 处的格式字符串无效
- html - 如何在 CSS 中为图像添加内部阴影
- c - 将两个二进制文件合并到一个新文件中
- uwp - 如何在 HockeyApp 上将电子邮件附加到崩溃日志
- javascript - Javascript Object.create:设置数据时内存会发生什么?
- java - Confluent Cloud 上的 Kafka 流:值为“600000”的“segment.ms”超出内部重新分区主题的最小限制 14400000
- google-api - 通过谷歌开发者控制台项目ID找出使用的电子邮件帐户
- arrays - 在scala中查找给定数组的最小值和最大值