Как получить доступ к контролю формы и форме группы в угловой реактивной форме - PullRequest
0 голосов
/ 29 августа 2018

Я бы хотел pipe форму группы реактивной формы.

Тогда я хотел бы сделать некоторые проверки для этой группы отдельных элементов управления.

Вот как я определяю свою форму

  myForm = this.formBuilder.group({
    myFormNameDrop: this.formBuilder.group({
      myName:['',Validators.required],
      myDrop:['era']
    }),    
    style:[''],
    userId:[this.user_id]
  });

И это pipe Я пытаюсь создать

this.results = this.myForm.value.myFormNameDrop.valueChanges.pipe(      
  debounceTime(400),
  distinctUntilChanged(),            
  filter(formdata => formdata.myName.length > 0),
  switchMap( formdata => this.shoesService.details(formdata.myName)),
  shareReplay(1)
);//pipe  

Я получаю две ошибки. TypeError: Cannot read property 'pipe' of undefined о this.results = this.myForm.value.myFormNameDrop.valueChanges.pipe(

и код VS показывает предупреждение о filter(formdata => formdata.myName.length > 0),: свойство myName не существует для типа '{}'

Как я могу получить доступ к formGroups и элементам управления formGroups в таких случаях? Я использую угловой 6

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

изменить эту строку:

this.results = this.myForm.value.myFormNameDrop.valueChanges.pipe( ...

до:

this.results = this.myForm.controls.myFormNameDrop.valueChanges.pipe( ...
0 голосов
/ 29 августа 2018

Вы неправильно выбираете элементы управления формой. Используйте метод get () для объекта FormGroup для извлечения formControl

this.results = this.myForm.get('myFormNameDrop').valueChanges.pipe(      
  debounceTime(400),
  .........................
);

РЕДАКТИРОВАТЬ:

Для доступа к myName вы можете сделать это следующим образом:

this.myForm.get('myFormNameDrop').get('myName').value


Кроме того, если вас интересует просто myName, то вы можете напрямую смотреть valueChanges из myName вместо просмотра myFormNameDrop

this.results = this.myForm.get('myFormNameDrop').get('myName').valueChanges.pipe(      
  debounceTime(400),
  distinctUntilChanged(),            
  filter((myName) => myName.length > 0),
  switchMap(myName => this.shoesService.details(myName)),
  shareReplay(1)
);
...