2017-04-18 1 views
0

Ich benutze Angular2 ForumBulder, um Formulare zu erstellen und Validierungen hinzuzufügen. Unter dem Beispielcode von KomponenteAngular2: Wie setze ich Validators.required als allgemeine Validierung für 2 Felder fest?

this.OtpForm = this._fb.group({ 
    otpInput: this._fb.group({ 
     otpInput1: ['', Validators.required], 
     otpInput2: ['', Validators.required], 
     otpInput3: ['', Validators.required], 
    }, { validator: this.numericValidator }) 
}); 

Jetzt funktioniert das gut. Aber Frage ist, wie zu Validators.required für alle Felder wie Custom Validator numericValidator?

Antwort

3

könnten Sie noch eine benutzerdefinierte Validator für otpInput Gruppe erstellen, zum Beispiel

validateAllRequired(g: FormGroup) { 
    let ctrls = g.controls; 
    let keys = Object.keys(ctrls); 
    let valid = true; 
    keys.forEach((key) => { 
     let ctrl = ctrls[key]; 
     if (ctrl.value.trim() == '') { 
     valid = false; 
     } 
    }); 
    return valid ? null : { 
     validateAllRequired: { 
     valid: valid 
     } 
    }; 
} 

und hinzufügen:

otpInput: this._fb.group({ 
    otpInput1: [''], 
    otpInput2: [''], 
    otpInput3: [''], 
}, { validator: Validators.compose([this.numericValidator, this.validateAllRequired]) }) 

kombinieren Validierer mit Validators.compose()

Validators.compose([...]) 

für asynchrone Validierer verwenden

Validators.composeAsync([...]) 
+0

Danke für die Antwort. Ich denke, validateAllRequired muss als this.validateAllRequired bezeichnet werden. richtig ?? –

+0

Wenn Sie 'validateAllRequired' in der aktuellen Klasse definiert haben, müssen Sie' this' verwenden, sonst könnten Sie in einigen anderen Bereichen diese Funktion wiederverwenden, Sie brauchen 'this' nicht, ich empfehle Ihnen, Ihre benutzerdefinierte Validierung einzuschalten andere Datei, so könnten Sie diese Funktion importieren, um sie zu verwenden. –

+0

Da die fragliche Komponente ist eine gemeinsame, so dass ich obwohl Funktion in der aktuellen Klasse selbst zu halten. Jetzt habe ich ein anderes Problem, dass, wenn ich beide benutzerdefinierte Validator wie '{validator: [this.numericValidator, this.validateAllRequired]}}', dann bekomme ich Fehler: 'this.validator ist keine Funktion'. Irgendwelche Vorschläge zu diesem Fehler ?? –

Verwandte Themen