2017-08-11 36 views
2

我已经定义了一个用于验证pan卡号的自定义验证器(https://en.wikipedia.org/wiki/Permanent_account_number)。角度4:自定义验证器未被调用

function validatePan(): ValidatorFn { 

return (c: AbstractControl) => { 
      var regpan = /^([a-zA-Z]){5}([0-9]){4}([a-zA-Z]){1}?$/; 

      if (!regpan.test(c.value)) { 
       return { 
        validatepan: { 
         valid: false 
        } 
        }; 
      } else { 
       return null; 
      } 
     } 
}   

@Directive({ 
selector: '[validatepan][ngModel], [validatepan][formControlName], [validatepan][formControl]', 
    providers: [ 
    { provide: NG_VALIDATORS, useExisting: forwardRef(() => PanValidator),  multi: true } 
    ] 
}) 
export class PanValidator implements Validator{ 
    validator: ValidatorFn; 

    constructor() { 
    this.validator = validatePan(); 
    } 

    validate(c: FormControl) { 
    console.log('here'); 
    return this.validator(c); 
    } 

} 

我已经注册指令在

declarations: [ 
     .... 
     PanValidator 
    ], 

我使用的指令如下

<input type="text" class="form-control" name="testpan" id="field_testpan" 
      [(ngModel)]="testval.testpan" 
     validatepan /> 

模块的声明部分,但它既不初始化指令,也没有调用验证功能。

回答

0
@Directive({ 
selector: '[validatepan][ngModel], 
    providers: [ 
    { provide: NG_VALIDATORS, useExisting: PanValidator, multi: true } 
    ] 
}) 

尝试更改上面的指令装饰器。

更多关于验证的形式LINK

+0

感谢您的回复。我也尝试过这个。但结果相同。 –

+0

@PrashanthRaghu你可以创建plunker,该链接有一个工作范例,请遵循,可能有帮助 –

+0

你得到的任何错误 –

2

我能找出问题。当我将验证器添加到出口部分时,功能无缝工作。

exports: [ 
    .... 
    PanValidator 
], 
+0

我很困惑,为什么这个工程。我有一个AppModule和MyModule结构。只需通过AppModule声明不起作用。我不得不在我的孩子模块内声明。这太奇怪了。 –