angular - FormArray 和 AsyncValidators(不是 AsyncValicatorFn)
问题描述
我有一个 FormArray 控件。其主要用例是用户粘贴值列表,应用程序将值拆分一个换行符,然后在 FormArray 中创建所需数量的输入并将值分配给每个输入。用户也可以一个一个地添加控件,手动输入值,但这将是一个罕见的例外,而不是规则。
我想要做的是验证所有粘贴的值与主数据相比是否有效,只需一次调用数组中提供的值的数组的服务器即可。我似乎无法弄清楚如何将 AsyncValidator(不是 AsyncValidatorFn)分配给 FormArray。FormBuilder 只接受 AsyncValidatorFn (或它们的数组)。由于没有为 AsyncValidator 分配指令的元素,我不清楚这应该如何工作。我可以做一些愚蠢的事情,比如将验证器注入到父组件中,然后setValidator
在 FormArray 上使用,但这确实看起来很老套。肯定有更好的方法,对吧?
例如,用户粘贴以下内容(想象从 excel 中复制一列值)
1
2
3
4
Angular 应用程序将其拆分为 4 个值,并将每个值分配给它自己在表单数组中的输入。
FormArray AsyncValidator 使用参数 [1,2,3,4] 调用服务器端点,并根据需要从那里生成 ValidationErrors。
解决方案
我有两个问题:
- 我挂断了通过
FormBuilder
而不是指令添加验证器。 - 我不知道
formArrayName
指令
我创建了ValuesExistValidator
as 指令并将其添加到<ng-container
带有指令的元素中,formControlName
因此 angular 可以将其应用于该 FormArray
<ng-container formControlName="lookupvalues" appValuesExistValidator>
<!-- inputs here -->
</ng-container>
完美运行。
推荐阅读
- java - 如何在java中使用随机生成器随机生成不同的用户名和姓氏到列表?
- php - 包含二进制数据和 JSON 的 HTTP 响应
- android - libfingersense.so 未加载 E/RecyclerView:未连接适配器;跳过布局
- azure - 如何使用 CLI 获取 VMSS 的私有 IP
- ckeditor - Typo3 8 LTS:CKEditor 下拉宽度
- ruby-on-rails - rails在创建新记录时删除旧记录
- android - 反应本机推送通知不起作用
- r - 如何在R中编写具有多个条件的ifelse语句?
- angular - 未选中 Angular 6 单选按钮
- html - 'currentTime' 属性在 chrome 中的 HTML5 视频中不起作用