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)
から転送しません... – balteo
私に。静的メソッドを呼び出す必要がある場合は、それを注入する必要はありません。静的メソッドが必要なのはなぜですか? –
あなたは私の言いたいことを見ますか? 'Validators.required、ValidationService.passwordValidator '' – balteo