角2自定義驗證我試圖做一個自定義的驗證我的FormControl mealType
依賴於其他形式的控制
如果我FormControl category
具有價值和mealType
沒有,mealType
應該是無效的。
如果category
沒有值,mealType
應該是有效的。
我得到一個控制檯錯誤:
TypeError: Cannot read property 'get' of undefined
代碼:
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
}
}
這是我的形式,是不確定的。
我該如何解決這個問題?
嘗試這樣的:
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
}
}
但它會導致:
Error in app/find-page/subcomponents/find-page/find-form.component.html:36:5 caused by: Cannot read property 'value' of undefined
嘗試這樣的:
class MealTypeValidator {
constructor(private categoryFormControl: FormControl) { }
mealTypeValidator(control: FormControl): { [error: string]: any } {
if (this.categoryFormControl.value) {
if (!control.value) {
return { error: true };
}
}
}
}
在我的表單組件
則:
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,
});
}
但我有編譯錯誤。我如何得到這個權利?我認爲我對我所做的驗證課和它的使用都有點偏差。
是否有可能有多個formgroup驗證器?如果我想要另一個驗證器,除了依賴於多個控件的「validateMealType」,該怎麼辦? –