Winkel-2 Benutzerdefinierte validator-das hängt davon ab, auf einem anderen Formular-Steuerelement
Ich versuche zu machen, einen benutzerdefinierten validator für meine FormControl mealType
Wenn mein FormControl category
einen Wert hat und mealType
nicht, mealType
unwirksam sein.
Wenn category
keinen Wert hat, wird mealType
gültig sein sollte.
Ich bin immer in der Konsole error:
TypeError: Cannot read property 'get' undefined
code:
ngOnInit() {
this.findForm = this.formBuilder.group({
categories: [null, Validators.required],
mealTypes: [null, this.validateMealType],
distanceNumber: null,
distanceUnit: 'kilometers',
keywords: null,
});
}
validateMealType() {
if (this.findForm.get('categories').value) {
if (this.findForm.get('mealTypes').value) {
var mealTypeError = false;
} else {
var mealTypeError = true;
}
} else {
var mealTypeError = false;
}
return mealTypeError ? null : {
error: true
}
}
Es ist meine form, die ist nicht definiert.
Wie kann ich dies beheben?
Versuchen, diese:
validateMealType(categoryControl: FormControl, mealTypeControl: FormControl) {
if (categoryControl.value) {
if (!mealTypeControl.value) {
var mealTypeError = true;
} else {
var mealTypeError = false;
}
} else {
var mealTypeError = false;
}
return mealTypeError ? null : {
error: true
}
}
aber es bewirkt:
Fehler in
app/find-Seite/Unterkomponenten/finden-Seite/suchen-Formular.Komponente.html:36:5
verursacht durch: Cannot read property 'Wert' undefined
versuchen, diese:
class MealTypeValidator {
constructor(private categoryFormControl: FormControl) { }
mealTypeValidator(control: FormControl): { [error: string]: any } {
if (this.categoryFormControl.value) {
if (!control.value) {
return { error: true };
}
}
}
}
dann in meinem form-Komponente:
ngOnInit() {
this.findForm = this.formBuilder.group({
categories: [null, Validators.required],
mealTypes: [null, new MealTypeValidator(this.findForm.get('categories').mealTypeValidator()],
distanceNumber: null,
distanceUnit: 'kilometers',
keywords: null,
});
}
aber ich habe Kompilierungsfehler. Wie bekomme ich diese Rechte? Ich glaube, ich bin gerade ein bisschen auf beiden deaktiviert die Validierung der Klasse I gemacht und die Nutzung von it.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie einen Schritt näher.
Müssen Sie Ihre benutzerdefinierten Prüfung zu den
FormGroup
statt, da braucht es zu wissen, zweiFormControl
(categories
undmealTypes
), so dass das anbringen anFormGroup
geben wird, der validator mehr überblick und Zugriff auf die gesamteFormControl
Um das zu erreichen, ändern Sie Ihre
ngOnInit
zuOben genannten code, die Sie tatsächlich verwenden
FormGroup
- Konstruktor anstelle desFormBuilder
, so können Sie fügen Sie Ihre benutzerdefinierte Validierung der Parameter. Auch, bewegen Sie Ihre benutzerdefinierten validator außerhalb der component-Klasse.Werfen Sie einen Blick auf diese Plunker, um mehr Einblicke für Ihren konkreten Fall hier.
{validators: validateMealType}
Dem Vorschlag von @Michael bei mir funktioniert mit einer kleinen änderung für die Winkel 4.
In der Validierungs-Funktion, die ich brauchte, um den parameter zu ändern Art von AbstractControl zu FormGroup, weil die AbstractControl in dieser version nicht enthalten, die die controls-Auflistung.
Dank auch, @Ariel, wer gründet diese post.