2017-01-06 4 views
0

は、私はそのようなクラスを持っている:活字体:staticメソッドの戻り値

export class GlobalValidation { 
    static emailPattern(control: AbstractControl): ValidationResult { 
     var EMAIL_REGEXP = Pattern.EMAIL; 
     return this.checkPattern(control, EMAIL_REGEXP); 
    } 

    static urlPattern(control: AbstractControl): ValidationResult { 
     var URL_REGEXP = Pattern.URL; 
     return this.checkPattern(control, URL_REGEXP); 
    } 

    static checkPattern(control: AbstractControl, pattern: any) { 
     if (control.value != "" && !pattern.test(control.value)) { 
      return {"incorrectPatternFormat": true}; 
     } 

     return null; 
    } 
} 

EXCEPTION: Uncaught (in promise): Error: Error in :0:0 caused by: Cannot read property 'checkPattern' of undefined TypeError: Cannot read property 'checkPattern' of undefined at GlobalValidation.urlPattern

私が間違って何をしているのですか?

私はこれにクラスを書き換え:

export class GlobalValidation { 

    static emailPattern(control: AbstractControl): ValidationResult { 

     var EMAIL_REGEXP = Pattern.EMAIL; 

     if (control.value != "" && !URL_REGEXP.test(control.value)) { 
      return {"incorrectPatternFormat": true}; 
     } 

     return null; 
    } 


    static urlPattern(control: AbstractControl): ValidationResult { 

     var URL_REGEXP = Pattern.URL; 

     if (control.value != "" && !URL_REGEXP.test(control.value)) { 
      return {"incorrectPatternFormat": true}; 
     } 

     return null; 
    } 
} 

すべてが正常です。

明らかなことがあるようですが、私はそれを逃しています。

答えて

2

あなたはthisを使用してcheckPatternを呼び出していますが、それは静的メソッドです。 checkPatternを使用してくださいGlobalValidation.checkPattern(...)

2

静的メソッドからthisにアクセスすることはできません。静的クラスの使用には1つの目的があります。つまり、メソッドを使用するためにクラスの新しいインスタンスを作成する必要はありません。

Phil Capが示唆したようにGlobalValidation.checkPatter(...)を使用するか、または書き換えるだけで、GlobalValidationクラスのプロパティは使用されません。