微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Formcontrolname 不以角度动态附加

如何解决Formcontrolname 不以角度动态附加

我正在使用 Angular 反应式表单,并在 html 中循环遍历将动态名称绑定到 formcontrolname 的对象数组,当我在输入时检查表单控件名称时,它没有显示

当我通过在输入字段中输入值来提交表单时,frmgrp.value 为空值, 请帮忙解决问题

 <form [formGroup]="frmGroup"> 
 <div *ngFor="let form_elem of formtemplate">
 <div [ngSwitchCase]="form_elem.keyType">
    <div *ngSwitchCase="'TEXTBox'"> 
   <div class="col-lg-4">
    <label for="{{form_elem.keyName}}" class="col-form-label"> 
    {form_elem.keyName}}</label>                                        
     <input type="text" class="form-control" autocomplete="off" 
     formControlName="form_elem.keyName"                                  
          id="{{form_elem.keyName}}">                                    
         </div>
          </div>
           </form>
  if(this.formtemplate.length>0){
  this.formtemplate.forEach((val:any) => {
    val.keyName=val.keyName.replace(/\s/g,"");
  });
 this.formtemplate.forEach((val:any)=>{
   group[val.keyName]=new FormControl('');  
 });
 group['id']=new FormControl('');  
 this.frmGroup = this.fb.group({group})
 this.frmGroup.controls=this.frmGroup.controls.group.value;
}

解决方法

你有很多错误,我什至不知道你的模板将如何编译。 ngSwitch 实现错误,您在标签上缺少 {,而 formControlName="form_elem.keyName" 应该是 [formControlName]="form_elem.keyName",因为您正在绑定一个变量。

TS 看起来不错,最大的禁忌在这里:

this.frmGroup.controls = this.frmGroup.controls.group.value;

您正在为表单组分配一个常规的 javascript 对象。你不能这样做,它们不是表单控件,只是一个简单的 javascript 对象。

group 似乎包含您所有的表单控件,因此您可以使用展开运算符将它们添加到您的表单中...现在您有了一个带有表单控件的表单组。但是您真的不需要group,只需将控件直接添加到您的表单组中即可。

考虑到我提到的所有内容,您的代码应该如下所示:

constructor(private fb: FormBuilder) {
  if (this.formtemplate.length) {
    this.frmGroup = this.fb.group({})
    this.formtemplate.forEach((val: any) => {
      this.frmGroup.addControl(val.keyName,this.fb.control(''));
    })
  }
}

模板:

<form [formGroup]="frmGroup" *ngIf="frmGroup">
  <div *ngFor="let form_elem of formtemplate">
    <div [ngSwitch]="form_elem.keyType">
      <div *ngSwitchCase="'TEXTBOX'">
        <label>{{form_elem.keyName}}</label>
        <input type="text" [formControlName]="form_elem.keyName">
      </div>
    </div>
  </div>
</form>

另外,不要使用any。输入您的数据,我们正在使用 TypeScript ;)

一个STACKBLITZ供您参考

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?