2016-08-15 89 views
0

我正在使用rc4角度發佈來編寫一個應用程序,其中我必須施加幾個驗證規則以形成像required,minlength一些組件驗證程序emailValidatorAngular 2-錯誤:類型'AbstractControl'不可分配給'AbstractControl'類型

當我通過一個內置的,一個自定義驗證到Validators.compose功能,集成開發環境(二者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

我通過從AbstractControl替換control參數的類型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延伸。我仍然不明白爲什麼當我使用FormControlAbstractControl時收到此錯誤消息。

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

相關問題