Угловой 6 набор валидатор требуется на основе родительского formValues - PullRequest
0 голосов
/ 22 октября 2018

У меня есть вложенная группа 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. Это лучший или новый способ добиться этого?

1 Ответ

0 голосов
/ 22 октября 2018

Вы должны назвать get как Function, но вы рассматриваете get как Array

Изменить его

this.userForm.get['audio'].value

до

this.userForm.get('audio').value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...