我创建了用于验证输入值的指令。我需要输入一些字符,我的输入/形式变为无效。 这是我的代码,但它不起作用。
import {Directive, Input} from '@angular/core';
import {AbstractControl, NG_VALIDATORS, ValidationErrors} from '@angular/forms';
const regExp = new RegExp('(>|<)+');
@Directive({
selector: '[validator]',
providers: [{
provide: NG_VALIDATORS,
useExisting: ValidatorDirective,
multi: true
}]
})
export class ValidatorDirective {
@Input('validator') input;
constructor() {
}
validate (control: AbstractControl): ValidationErrors {
const value = control.value;
const isValid = regExp.test(value);
return isValid ? null : {
validator: {
valid: false
}
};
}
}
感谢您的帮助。 祝你有愉快的一天。
答案 0 :(得分:1)
使用[validator][ngModel]
可以解决您的问题,因为您不需要输入此指令
喜欢这个
import {AbstractControl, ValidatorFn, Validator, FormControl, NG_VALIDATORS} from "@angular/forms";
import {Directive} from '@angular/core';
const regExp = new RegExp('(>|<)+');
function validateregex(): ValidatorFn {
return (c : AbstractControl) => {
const isValid = regExp.test(c.value);
console.log("Valid"+isValid);
//let isValid = c.value === 'Rahul';
if(isValid){
return null;
}else{
return {
validator: {
valid: false
}
};
}
}
}
@Directive({
selector: '[regex][ngModel]',
providers: [{
provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true
}]
})
export class ValidatorDirective implements Validator{
validator: ValidatorFn;
constructor() {
this.validator = validateregex();
}
validate(c: FormControl) {
return this.validator(c);
}
}
将此指令添加到declarations
Ngmodule
ValidatorDirective,
数组中
相同link的工作示例。