2017-08-11 59 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聲明不起作用。我不得不在我的孩子模塊內聲明。這太奇怪了。 –