首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ngx-formly执行异步验证和去抖动?

如何使用ngx-formly执行异步验证和去抖动?
EN

Stack Overflow用户
提问于 2021-10-18 16:54:56
回答 1查看 64关注 0票数 0

我在我的表单配置中尝试了以下内容:

代码语言:javascript
复制
  fields: FormlyFieldConfig[] = [
    {
      key: 'text',
      type: 'input',
      modelOptions: {
        debounce: {
          default: 2000,
        },
      },
      templateOptions: {
        label: 'Debounce',
      },
      validators: ["test"]
    },
  ];

和下面的FormlyConfig定义:

代码语言:javascript
复制
{
      validationMessages: [
        {
          name: 'test',
          message: "The value cannot be X",
        },
      ],
      validators: [
        {
          name: "test",
          validation: ((control: FormControl) => {
            return !!control.value || control.value === "X" ? null :  {test: true};
          })
        }
      ]
    }

我观察到的是,无论指定的去抖动如何,验证器都会立即运行。

此外,模型会使用去抖动进行更新,而角度形状会立即更新。

这是一个bug还是预期的行为?如何使用ngx-formly来揭穿验证?

这是一个堆栈闪电战:

https://stackblitz.com/edit/angular-knzoth?file=src/app/app.module.ts

谢谢!

EN

Stack Overflow用户

发布于 2021-10-18 21:03:45

解决方法如下:

代码语言:javascript
复制
validation: (control: FormControl): ValidationErrors => {
  if (!control.value) {
    return of(null);
  }

  return control.valueChanges.pipe(
    startWith(control.value),
    debounceTime(500),
    distinctUntilChanged(),
    switchMap(value => value === "X" ? null :  {test: true}),
    first()
  );
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69619810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档