如何以角度反应形式访问表单控件和表单组

问题描述 投票:0回答:2

我想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

谢谢

angular angular6 angular-forms angular-pipe
2个回答
1
投票

您没有正确获取表单控件。在get()对象上使用FormGroup方法来获取formControl

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

编辑:

要访问myName,您可以按以下方式进行:

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


此外,如果你对myName感兴趣,那么你可以直接观看valueChangesmyName,而不是看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)
);

1
投票

改变这一行:

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

至 :

this.results = this.myForm.controls.myFormNameDrop.valueChanges.pipe( ...
© www.soinside.com 2019 - 2024. All rights reserved.