2016-07-19 7 views
2

私は静的メソッド内で注入依存関係を使用しようとしていますが、注入依存関係はインスタンススコープであり、固定メソッド。ここで注入された角度サービスを静的メソッド内の依存として使用する

は私のクラスである:

@Injectable() 
export class PasswordValidationService { 

    constructor(private userAccountService:UserAccountService) { 
    } 

    static passwordValidator(control:AbstractControl) { 
    return control 
     .valueChanges 
     .debounceTime(400) 
     .switchMap(()=> this.userAccountService.checkCurrentPassword(control.value)) 
     .map(res=> { 
      if (res.json() === true) { 
      return null; 
      } 
      else { 
      return {invalid: true}; 
      } 
     } 
    ); 
    } 

} 

私の質問には、静的メソッド内UserAccountService(依存)を使用するために最善の方法は何かありますか?

編集

:コンポーネントは、バリデータを使用している。ここ

import {Injectable} from "@angular/core"; 
import {UserAccountService} from "../../useraccount/useraccount.service"; 
import {AbstractControl} from "@angular/common"; 
import {Observable} from "rxjs/Observable"; 


@Injectable() 
export class PasswordValidationService { 

    constructor(private userAccountService:UserAccountService) { 
    } 

    passwordValidator(control:AbstractControl):Observable<any> { 
    let validationResult = this.userAccountService.checkCurrentPassword(control.value) 
     .map(res=> { 
      if (res.json() === true) { 
      return null; 
      } 
      else { 
      return {invalid: true}; 
      } 
     } 
    ); 

    return validationResult; 
    } 

} 

:ここ

がバリである:私は次のようにインスタンスメソッドの代わりに、静的メソッドを使用しての方に私のアプリを再設計しました
constructor(private router:Router, 
       private formBuilder:FormBuilder, 
       private stylingService:StylingService, 
       private sessionService:SessionService, 
       private passwordValidationService:PasswordValidationService) { 
    } 

    ngOnInit() { 
    this.signinForm = this.formBuilder.group({ 
     credentials: this.formBuilder.group({ 
     username: [this.credentials.username, Validators.required], 
     password: [this.credentials.password, [Validators.required, this.passwordValidationService.passwordValidator]] 
     }) 
    }); 
    } 

ここに表示されるエラーメッセージは次のとおりです。

あまり意味がありません
browser_adapter.ts:82 TypeError: Cannot read property 'userAccountService' of undefined 
    at PasswordValidationService.passwordValidator (http://localhost:8080/app/shared/services/password-validation.service.js:18:36) 
    at eval (http://localhost:8080/vendor/@angular/forms/src/validators.js:137:49) 
    at Array.map (native) 
    at _executeValidators (http://localhost:8080/vendor/@angular/forms/src/validators.js:137:23) 
    at FormControl.eval [as validator] (http://localhost:8080/vendor/@angular/forms/src/validators.js:116:33) 
    at FormControl.AbstractControl._runValidator (http://localhost:8080/vendor/@angular/forms/src/model.js:178:56) 
    at FormControl.AbstractControl.updateValueAndValidity (http://localhost:8080/vendor/@angular/forms/src/model.js:164:29) 
    at new FormControl (http://localhost:8080/vendor/@angular/forms/src/model.js:304:14) 
    at FormBuilder.control (http://localhost:8080/vendor/@angular/forms/src/form_builder.js:36:16) 
    at FormBuilder._createControl (http://localhost:8080/vendor/@angular/forms/src/form_builder.js:68:25) 

答えて

3

いずれかのクライアントが、それが動作しませんので、静的メソッドを呼び出す必要があるメソッドが静的にするか、インスタンスメソッド

export class PasswordValidationService { 

    constructor(private userAccountService:UserAccountService) { 
    } 

    validate(control:AbstractControl) { 
    return PasswordValidationService.passwordValidator(control); 
    } 

    static passwordValidator(control:AbstractControl) { 
    ... 
    } 
} 
+0

から転送しません... – balteo

+0

私に。静的メソッドを呼び出す必要がある場合は、それを注入する必要はありません。静的メソッドが必要なのはなぜですか? –

+0

あなたは私の言いたいことを見ますか? 'Validators.required、ValidationService.passwordValidator '' – balteo

関連する問題