2017-01-20 5 views
3

У меня проблема с использованием угловых 2 асинхронных валидаторов.Проблема с угловым массивом асинхронных асинхронных систем: асинхронный валидатор всегда возвращает ошибку проверки

У меня есть следующий компонент:

@Component({ 
    templateUrl: './send-activation-information.component.html' 
}) 
export class SendActivationInformationComponent implements OnInit { 

    activationInformationForm: FormGroup; 
    submitted: boolean = false; 

    constructor(private userAccountService: UserAccountService, 
       private formBuilder: FormBuilder, 
       private router: Router) { 
    } 

    ngOnInit() { 
    this.activationInformationForm = this.formBuilder.group({ 
     email: ['', [ 
     Validators.required, 
     Validators.pattern(AppConstants.EMAIL_PATTERN) 
     ], [ 
     validateEmailKnownFactory(this.userAccountService), 
     validateUserAccountNonActivatedFactory(this.userAccountService) 
     ]] 
    }); 
    } 

    sendActivationInformation() { 
    this.submitted = true; 
    if (this.activationInformationForm.valid) {  
     this.userAccountService.sendActivationInformation(this.activationInformationForm.value) 
     .subscribe(() => this.router.navigate(['/sendactivationinformation/success'])); 
    } 
    } 
} 

, который использует два валидаторов синхронизации и два асинхронных валидатор, указанных в двух массивах.

По какой-то причине следующей асинхронной валидатор всегда указывает на ошибку проверки:

export function validateUserAccountNonActivatedFactory(userAccountService: UserAccountService): {[key: string]: any} { 
    return (control: AbstractControl) => { 
    return userAccountService.userAccountAlreadyActivated(control.value) 
     .map(alreadyActivated => alreadyActivated ? {userAccountNonActivatedValidator: {alreadyActivated: true}} : null); 
    }; 
} 

... или не возвращает false или true вызов бэкенд.

FYI, userAccountAlreadyActivated делает HTTP вызов внутреннего интерфейса следующим образом:

userAccountAlreadyActivated(email: string) { 
    let body = 'email=' + email; 
    return this.http.get(this.urls.USER_ACCOUNT.ALREADY_ACTIVATED + body); 
    } 
+0

Я подозреваю, что проблема связана с тем, как я указываю массив проверки асинхронного действия, но я не уверен. – balteo

+1

Это работает, если вы добавляете только асинхронные валидаторы или даже только один асинхронный валидатор? –

+0

Нет. Вы правы, валидатор не работает сам по себе (я прокомментировал первый валидатор). И ошибочно, вернётся ли «true» или «false» из бэкэнда ... – balteo

ответ

0

Я забыл карту результат JSon ...

Таким образом, переход от:

userAccountAlreadyActivated(email: string) { 
    let body = 'email=' + email; 
    return this.http.get(this.urls.USER_ACCOUNT.ALREADY_ACTIVATED + body); 
    } 

до:

userAccountAlreadyActivated(email: string) { 
    let body = 'email=' + email; 
    return this.http.get(this.urls.USER_ACCOUNT.ALREADY_ACTIVATED + body).map(res => res.json()); 
    } 

исправил проблему, которая не имела никакого отношения к угловым валидаторам за один вопрос.

 Смежные вопросы

  • Нет связанных вопросов^_^