如何在 Angular 2+ 中延迟输入验证

bre*_*aub 6 angular-directive angular-directive-link angular

在 AngularJS 中,您可以使用指令设置输入以延迟验证

link(scope, elem, attr, ngModel) {
    ngModel.$overrideModelOptions({
        updateOn: 'default blur',
        debounce: {
            blur: 0,
            default: 500,
        },
    });
}
Run Code Online (Sandbox Code Playgroud)

它的作用是:当输入更改时,在输入从有效/无效验证之前给出 500 毫秒的延迟。

在 Angular2+ 中,这似乎更困难。我想我可以用 observable 来监听更改并以这种方式更新验证,但是我如何告诉初始输入不验证?

Tom*_*ula 10

由于 Angular 5.0 可以更好地控制何时运行表单验证。您可以将验证配置为在选项上运行blursubmit使用updateOn选项。

  1. 反应形式示例:

将在表单控件模糊上运行验证器:

new FormControl(null, {
  updateOn: 'blur'
});
Run Code Online (Sandbox Code Playgroud)

提交表单后将运行验证器:

new FormGroup({
  fistName: new FormControl(),
  lastName: new FormControl()
}, { updateOn: 'submit' });
Run Code Online (Sandbox Code Playgroud)
  1. 模板驱动的表单:

将在表单控件模糊上运行验证器:

<input [(ngModel)]="firstName" [ngModelOptions]="{updateOn: 'blur'}">
Run Code Online (Sandbox Code Playgroud)

提交表单后将运行验证器:

文档中的更多信息

正如评论中提到的那样,您还可以订阅表单值更改流,但如果您对延迟表单验证感兴趣,您可能应该查看该updateOn属性。