FormArray 和 AsyncValidators(不是 AsyncValicatorFn)

时间:2021-06-30 22:29:20

标签: angular angular-reactive-forms

我有一个 FormArray 控件。其主要用例是用户粘贴值列表,应用程序将值拆分为一个换行符,然后根据需要在 FormArray 中创建尽可能多的输入并将值分配给每个值。用户也可以一个一个地添加控件并手动输入值,但这将是一个罕见的例外,而不是规则。

我想要做的是验证所有粘贴的值与主数据相比是否有效,只需对数组中提供的值的数组的服务器进行一次调用。我似乎无法弄清楚如何将 AsyncValidator(不是 AsyncValidatorFn)分配给 FormArray。 FormBuilder 仅采用 AsyncValidatorFn (或它们的数组)。由于没有为 AsyncValidator 分配指令的元素,我不清楚这应该如何工作。我可以做一些愚蠢的事情,比如将验证器注入父组件,然后在 FormArray 上使用 setValidator,但这确实看起来很笨拙。肯定有更好的方法,对吧?

例如用户粘贴以下内容(想象从 Excel 复制一列值)

1
2
3
4

Angular 应用程序将其拆分为 4 个值,并将每个值分配给它自己在表单数组中的输入。

FormArray AsyncValidator 使用参数 [1,2,3,4] 调用服务器端点,然后根据需要从那里生成 ValidationErrors。

1 个答案:

答案 0 :(得分:0)

我有两个问题:

  1. 我一直在想通过 FormBuilder 而不是指令添加验证器。
  2. 我不知道 formArrayName 指令

我创建了 ValuesExistValidator 作为指令,并将其添加到带有 <ng-container 指令的 formControlName 元素,以便 angular 可以将其应用于该 FormArray

<ng-container formControlName="lookupvalues" appValuesExistValidator>
  <!-- inputs here -->
</ng-container>

完美运行。

相关问题