Angular2 template driven async validator

Ich habe ein Problem mit der Definition des asynchronen Validators in vorlagengesteuerter Form.

Derzeit habe ich diesen Eingang:

<input type="text" ngControl="email"  [(ngModel)]="model.applicant.contact.email" #email="ngForm" required asyncEmailValidator>

mit Prüferauswahl asyncEmailValidator was auf diese Klasse zeigt:

import {provide} from "angular2/core";
import {Directive} from "angular2/core";
import {NG_VALIDATORS} from "angular2/common";
import {Validator} from "angular2/common";
import {Control} from "angular2/common";
import {AccountService} from "../services/account.service";

@Directive({
selector: '[asyncEmailValidator]',
providers: [provide(NG_VALIDATORS, {useExisting: EmailValidator, multi: true}), AccountService]
})

export class EmailValidator implements Validator {
//https://angular.io/docs/ts/latest/api/common/Validator-interface.html


constructor(private accountService:AccountService) {
}

validate(c:Control):{[key: string]: any} {
    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;

    if (!EMAIL_REGEXP.test(c.value)) {
        return {validateEmail: {valid: false}};
    }

    return null;

    /*return new Promise(resolve =>
        this.accountService.getUserNames(c.value).subscribe(res => {
            if (res == true) {
                resolve(null);
            }
            else {
                resolve({validateEmailTaken: {valid: false}});
            }
        }));*/
}

}

E-Mail-Regex-Teil funktioniert wie erwartet und Formular wird erfolgreich überprüft, wenn Regex übereinstimmt. Aber danach möchte ich überprüfen, ob die E-Mail-Adresse noch nicht verwendet wird. Ich erstelle also ein Versprechen für meinen AccountService. Dies funktioniert jedoch überhaupt nicht und die Form ist die ganze Zeit über fehlerhaft.

Ich habe die folgenden Informationen zu modellgesteuerten Formularen und zur Verwendung von FormBuilder gelesen:

constructor(builder: FormBuilder) {
this.email = new Control('',
  Validators.compose([Validators.required, CustomValidators.emailFormat]), CustomValidators.duplicated
);
}

Welche asynchrone Validatoren im dritten Parameter von @ definiert habSteuerung( Aber das ist nicht mein Fall, weil ich einen anderen Ansatz benutze.

So ist meine Frage: Ist es möglich, einen asynchronen Validator mit vorlagengesteuerten Formularen zu erstellen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage