gpt4 book ai didi

validation - Angular2 去抖时间后如何触发验证输入?

转载 作者:行者123 更新时间:2023-12-04 14:30:33 25 4
gpt4 key购买 nike

我有一个带有“名称”控件的表单。

<div class="field">
<label>Name</label>
<input ngControl="name">
<p *ngIf="name.pending">
Fetching data from the server...
</p>
<div *ngIf="!name.valid && !name.pending"
class="ui error message">Name is not valid</div>
</div>

控件是这样用 FormBuilder 构建的:

this.name = fb.control('', null, this.characterNameValidator.bind(this));

我创建了一个验证器:

characterNameValidator(control: Control) {
let q = new Promise((resolve, reject) => {
setTimeout(() => {
if (this._characterService.isCharacterNameAlreadyExists(control.value)) {
resolve({nameCharacterAlreadyExistsError: true});
} else {
resolve(null);
}
}, 1000)
});

return q;
}

每次击键时,都会调用我的验证器。我正在寻找一种仅在去抖时间后调用验证器的方法。

我尝试使用 valueChanges(),但我只在调用特定服务时才理解,而不是在验证的情况下。

编辑

手动管理验证来解决我的问题是个好主意吗?我没有在我的控件中放置验证器,但我在 valueChanges 上手动设置了错误。

this.name = fb.control('');

this.name.valueChanges.debounceTime(400).subscribe(() => {
this.characterNameValidator(this.name).then((validationResult => {
this.name.setErrors(validationResult)
}))
});

最佳答案

参见 https://github.com/angular/angular/issues/1068对于相关的未决问题。

如果您将对控件的引用传递给验证器,您可以使用类似的东西

this.formGp.controls['numberFld'].updateValueAndValidity();

来自 https://stackoverflow.com/a/33377290/217408

关于validation - Angular2 去抖时间后如何触发验证输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com