Angular 2 自定义验证不在组件函数内部调用

凯文 - Dhinesh babu

我正在尝试使用自定义验证器查找重复的经销商名称。经销商名称数据来自网络服务。我有经销商服务来获取经销商数据。我在组件内的 validDelarName 函数中使用它进行经销商重复验证。我在 FromGroup 验证器上声明它,但它没有被调用。

Form Group Validator - declare

name: ['', Validators.compose([Validators.required, Validators.maxLength(128),Validators.pattern('[a-zA-Z0-9\\s\\-\\,\\.\\&\\(\\)]+'),(control:FormControl)=>this.validDelarName])],

验证功能。它也存在于组件中。

 validDelarName(FormControl){   
  const dealer = this.dealer.getviewdealer().subscribe( //getting data using webservices
  (data) => {       
     data.forEach(items => {
      for (var key in items) {
        if (items.hasOwnProperty(key)) {

          if(control.value == items['dealername']){
            return {valid:true;}
          }
          else{
            retrun null;
          }

        }
      }
     });
  }

);
 }
开发商033

首先,你的代码有很多错误,我们来列举一下:

1 - 由于您的自定义验证器validDelarNameasync,所以它必须作为第三个。参数,像这样:

name: [
  '', 
  [
    Validators.required, 
    Validators.maxLength(128),
    Validators.pattern('[a-zA-Z0-9\\s\\-\\,\\.\\&\\(\\)]+')
  ],
  (control: AbstractControl) => this.validDelarName // Fix later
]

2 - 您必须将控件或上下文传递给您的自定义验证器,如下所示:

(control: AbstractControl) => this.validDelarName(control)

或者,如果您更喜欢:

this.validDelarName.bind(this)

3 -validDelarName的签名有误,应该是这样的:

validDelarName(control: AbstractControl) { ... }

4 -async 验证器等待或 aPromise或 anObservable并且您仅null | errorObj在 中返回forEach,而该 没有做任何事情。

解决方案:

而不是subscribe您可以使用map运算符(或者如果您愿意,您可以使用 Promise)并让 Angular 完成他的工作。

要搜索您的特定值,array我建议您使用Array#some如果在数组中找到键入的文本,它将返回 true 并自动停止循环,否则它将返回 false。

基于此,您可以返回错误 object或空值,如下所示:

validDelarName(control: AbstractControl) {
  return this.dealer.getviewdealer().map(data => {
    const hasItem: boolean = data.some(item => control.value === item['dealername']);

    return hasItem ? { valid: true } : null;
  });
}

5 - 正如您在上面看到的,您不需要迭代data 对象的所有键(正如您正在做的那样),因为您只想比较dealername.

6(小错误) - 你有一个错字retrun null;,应该是return null;:)。

7(归功于@yurzui) - return {valid:true;} should be return { valid: true };


尖端:

1 -Validators.compose不需要,您可以只array在两个参数(第二个和第三个)中传递,或者如果它是单个验证器,则是验证器本身。

2 -Validators.pattern接受 a RegExp,因此您可以使用它。

为什么?不是用双斜线转义符号,你只能转义一个斜线和 IMO,它更具可读性。

样品

Validators.pattern(/^[a-zA-Z0-9\s-\,\.&\(\)]+$/)

另外,请注意,并非此处的所有符号都需要转义(我去掉了不需要的转义)。

完整演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular 2侦听组件内部的自定义事件

来自分类Dev

Angular2自定义验证器未调用

来自分类Dev

Angular2自定义验证器未调用

来自分类Dev

Angular 2自定义输入组件验证(新表格API)

来自分类Dev

Angular 2自定义表单验证不会阻止onSubmit的调用

来自分类Dev

将自定义验证器拆分为多个函数 Angular 2

来自分类Dev

创建ngSwitch新视图后,Angular2调用自定义函数

来自分类Dev

NgSwitch中的Angular2自定义组件

来自分类Dev

Angular 2/4:如何使我的自定义组件只读

来自分类Dev

带有参数的Angular 2自定义验证器

来自分类Dev

Angular 2-自定义验证器语法

来自分类Dev

Angular 2异步自定义验证器

来自分类Dev

Angular 2-自定义验证器语法

来自分类Dev

Angular 2 反应式表单自定义验证

来自分类Dev

Angular 2 组件函数调用

来自分类Dev

验证错误消息未显示为Angular 2中的自定义验证

来自分类Dev

使用自定义验证程序ng-valid类进行Angular 2表单验证

来自分类Dev

验证错误消息未显示为Angular 2中的自定义验证

来自分类Dev

使用自定义验证程序ng-valid类进行Angular 2表单验证

来自分类Dev

调用嵌套组件函数angular2

来自分类Dev

angular 2自定义指令OnInit

来自分类Dev

自定义管道在Angular 2中

来自分类Dev

消费angular 2自定义库

来自分类Dev

如何编写依赖于Angular2中当前组件的属性值的自定义表单验证器(由模型驱动)

来自分类Dev

Angular Ractive Forms:从自定义组件获取验证器

来自分类Dev

触摸/未触摸未在自定义输入组件中更新-Angular 2

来自分类Dev

自定义指令与Angular2中的组件之间的通信

来自分类Dev

将自定义组件与Angular2结合使用时,JQueryUI Sortable无法正常工作

来自分类Dev

无法导入自定义组件-Angular2和TypeScript

Related 相关文章

  1. 1

    Angular 2侦听组件内部的自定义事件

  2. 2

    Angular2自定义验证器未调用

  3. 3

    Angular2自定义验证器未调用

  4. 4

    Angular 2自定义输入组件验证(新表格API)

  5. 5

    Angular 2自定义表单验证不会阻止onSubmit的调用

  6. 6

    将自定义验证器拆分为多个函数 Angular 2

  7. 7

    创建ngSwitch新视图后,Angular2调用自定义函数

  8. 8

    NgSwitch中的Angular2自定义组件

  9. 9

    Angular 2/4:如何使我的自定义组件只读

  10. 10

    带有参数的Angular 2自定义验证器

  11. 11

    Angular 2-自定义验证器语法

  12. 12

    Angular 2异步自定义验证器

  13. 13

    Angular 2-自定义验证器语法

  14. 14

    Angular 2 反应式表单自定义验证

  15. 15

    Angular 2 组件函数调用

  16. 16

    验证错误消息未显示为Angular 2中的自定义验证

  17. 17

    使用自定义验证程序ng-valid类进行Angular 2表单验证

  18. 18

    验证错误消息未显示为Angular 2中的自定义验证

  19. 19

    使用自定义验证程序ng-valid类进行Angular 2表单验证

  20. 20

    调用嵌套组件函数angular2

  21. 21

    angular 2自定义指令OnInit

  22. 22

    自定义管道在Angular 2中

  23. 23

    消费angular 2自定义库

  24. 24

    如何编写依赖于Angular2中当前组件的属性值的自定义表单验证器(由模型驱动)

  25. 25

    Angular Ractive Forms:从自定义组件获取验证器

  26. 26

    触摸/未触摸未在自定义输入组件中更新-Angular 2

  27. 27

    自定义指令与Angular2中的组件之间的通信

  28. 28

    将自定义组件与Angular2结合使用时,JQueryUI Sortable无法正常工作

  29. 29

    无法导入自定义组件-Angular2和TypeScript

热门标签

归档