У меня есть вложенная группа FormGroup, и я хотел бы установить валидатор (Обязательный) на основе родительского значения.
this.userForm = fb.group({
audio: [''],
audioSet: fb.group({
producer: [0, this.userForm.get('audio').value ? Validators.required : '']
}),
})
Но this.userForm.get('audio').value
выбросить неопределенное значение в этот раз (нормально).
DetailsComponent_Host.ngfactory.js? [sm]:1 ERROR TypeError: Cannot read property 'get' of undefined
at new DetailsComponent (details.component.ts:24)
at createClass (core.js:9303)
at createDirectiveInstance (core.js:9186)
at createViewNodes (core.js:10406)
at createRootView (core.js:10320)
at callWithDebugContext (core.js:11351)
at Object.debugCreateRootView [as createRootView] (core.js:10838)
at ComponentFactory_.push../node_modules/@angular/core/fesm5/core.js.ComponentFactory_.create (core.js:8666)
at ComponentFactoryBoundToModule.push../node_modules/@angular/core/fesm5/core.js.ComponentFactoryBoundToModule.create (core.js:3315)
at ViewContainerRef_.push../node_modules/@angular/core/fesm5/core.js.ViewContainerRef_.createComponent (core.js:8776)
Итак, я установил валидатор в valueChange:
this.userForm.controls['audio'].valueChanges.subscribe(result => {
const ctrl = this.userForm.get(['audioSet', 'producer']);
if (result) {
ctrl.setValidators(Validators.required);
ctrl.updateValueAndValidity();
} else {
ctrl.setValidators(null);
ctrl.updateValueAndValidity();
}
});
У меня есть множество значений в моей вложенной группе formGroup. Это лучший или новый способ добиться этого?