2016-08-15 24 views
0

角度rc4リリースを使用して、requiredminlengthなどのフォームコンポーネントに適用する検証ルールをいくつか適用する必要があります。バリデーターemailValidator。私は内蔵の1とValidators.compose関数に1つのカスタムバリデータを渡すと角度2エラー: 'AbstractControl'タイプに 'AbstractControl'タイプが割り当てられません

、IDEの(両方Webstorm & VSコード)私は以下のようなタイムエラーメッセージをコンパイルし表示します。ただし

enter image description here

、上記のスクリーンショットで、両方のバリデーターが組み込まれていると、エラーメッセージは表示されません。

私のカスタムバリデータの定義は以下の通りである:

static emailValidator(control: AbstractControl): {[key: string]: boolean} { 
    if (control.value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)) { 
     return null; 
    } else { 
     return {'invalidEmailAddress': true }; 
    } 
} 

答えて

0

Iは、以下に示すように、ControlAbstractControlからcontrolパラメータの種類を交換することによって問題を解決:

static emailValidator(control: Control): {[key: string]: boolean} { 
    if (control.value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)) { 
     return null; 
    } else { 
     return {'invalidEmailAddress': true }; 
    } 
} 

ControlクラスはAbstractControlから延びています。私はまだFormControlまたはAbstractControlを使用すると、このエラーメッセージが表示される理由を理解できません。

0

これはかなり奇妙である、あなたはすでにFormControlてみましたか?

このようにします。

static emailValidator(control : FormControl){ 
    // RFC 2822 compliant regex 
    let EMAIL_REGEXP = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i; 

    return EMAIL_REGEXP.test(control.value) ? null : { 
     invalidEmailAddress:true 
    } 
} 

私は私のコンポーネントでValidator.composeを使用しませんし、それだけで正常に動作します。

+0

はい、しました。実際には、私は 'AbstractControl'から継承した' FormControl'を使っていました。 –

+0

@AJQarshiというのは、このエラーが奇妙な理由です。FormControlを最初に宣言します。 ' this.emailControl = new FormControl( ''、Validators.compose([Validator.required、ValidatorService.emailValidator])、ValidatorService.checkEmai( this._httpService)); ' 私はそれをFormGroup入力オブジェクトのキーに割り当てます – Yoanribeiro

関連する問題