角度4:自定义验证器未被调用
问题描述:
我已经定义了一个用于验证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 />
模块的声明部分,但它既不初始化指令,也没有调用验证功能。
答
@Directive({
selector: '[validatepan][ngModel],
providers: [
{ provide: NG_VALIDATORS, useExisting: PanValidator, multi: true }
]
})
尝试更改上面的指令装饰器。
更多关于验证的形式LINK
答
我能找出问题。当我将验证器添加到出口部分时,功能无缝工作。
exports: [
....
PanValidator
],
+0
我很困惑,为什么这个工程。我有一个AppModule和MyModule结构。只需通过AppModule声明不起作用。我不得不在我的孩子模块内声明。这太奇怪了。 –
感谢您的回复。我也尝试过这个。但结果相同。 –
@PrashanthRaghu你可以创建plunker,该链接有一个工作范例,请遵循,可能有帮助 –
你得到的任何错误 –