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

标签 validation asynchronous angular

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

<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/

相关文章:

c# - 在 WCF 服务中的异步方法调用期间检测连接失败

node.js - 将 .npmrc 文件添加到 Angular 项目

javascript - 我遇到 Angularjs $invalid 问题

python - 如何使用 SQLAlchemy 在模型中进行表单验证?

asynchronous - 什么时候onDone事件可用于Dart中的StreamSubscription?

javascript - 使用 mongodb 操作运行 for-in 循环

angular - NG 测试在控制台中显示名称

angular - @HostListener ('change' ) 不工作 - Angular2 RC1

javascript - 简单的 Javascript 验证

java - 在 javax 库中使用 Float 字段时如何使用 @Size 验证?