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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以角度反应形式访问表单控件和表单组相关的知识,希望对你有一定的参考价值。

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

谢谢

答案

您没有正确获取表单控件。在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)
);
另一答案

改变这一行:

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

至 :

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

以上是关于如何以角度反应形式访问表单控件和表单组的主要内容,如果未能解决你的问题,请参考以下文章

以反应形式设置图像 url 在角度 2 中给出错误

角度测试以反应形式提交事件

填充/修补角度反应形式的值

显示角度反应形式错误消息的最佳方法,一个表单控制多个验证错误?

Mat Table 中的嵌套反应表单找不到控件

如何在标签中使用表格控件名称-角反应形式