作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有“名称”控件的表单。
<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();
关于validation - Angular2 去抖时间后如何触发验证输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278234/
我是一名优秀的程序员,十分优秀!