2

Ich habe eine Angular2 Form mit 2 benutzerdefinierten Validatoren, die ich ein FormControl passieren:Angular2: Wie können benutzerdefinierte Validatoren in einer bestimmten Reihenfolge angewendet werden?

this.myForm = fb.group({ 
    'CF': ['', [Validators.required, customValidator()], asyncCustomValidator()], 
}); 

Hier ist ein Plunker: https://plnkr.co/edit/pDMKtdC5PqFttfraOPqf (es auf einer alte Angular2 Version basiert).

würde Ich mag das folgende Verhalten erreichen:

Nur wenn der Benutzer die required und customValidator Tests besteht, dann kann die asyncCustomValidator starten (und Anrufe Backend machen).

Wie bekomme ich dieses Verhalten?

Gibt es darüber hinaus einen Unterschied zwischen der Verwendung der Methode compose und dem Setzen von zwei oder mehr Validatoren im selben Array?

Antwort

-1

Warum nicht einen dritten Validator erstellen, der einfach beide benutzerdefinierten Validatoren aufruft?

function composedValidator(){ 
    if(doValidationFirst){ 
    return doValidationSecond(); 
    } 
    failAndReturn(); 
} 

Edit:

Hier ist ein Artikel über „bedingte Validierung“, aber IMO für Ihren Fall würde ich das obige Verfahren statt:

https://scotch.io/tutorials/how-to-implement-conditional-validation-in-angular-2-model-driven-forms

, die wie nicht ganz das scheint richtiges Werkzeug für Sie ...

+0

Ist das der richtige "Angular2 Weg"? – smartmouse

+0

Sehen Sie meine Bearbeitung, es ist die Art, wie ich es tun würde. – mikeb

+0

"setValidators und updateValueAndValidity sind die Funktionen, die Sie fast nie anrufen sollten" als jemand hier gepostet: http://StackOverflow.com/a/41847805/2516399 – smartmouse

Verwandte Themen