如何在响应式表单中使用对象数组作为控件

2024-01-04

我需要动态创建textarea对于表格。我有以下模型:

this.fields = {
      isRequired: true,
      type: {
        options: [
          {
            label: 'Option 1',
            value: '1'
          },
          {
            label: 'Option 2',
            value: '2'
          }
        ]
      }
    };

并形成:

this.userForm = this.fb.group({
      isRequired: [this.fields.isRequired, Validators.required],
      //... here a lot of other controls
      type: this.fb.group({
         options: this.fb.array(this.fields.type.options),
      })
});

模板部分:

<div formGroupName="type">
       <div formArrayName="options">
         <div *ngFor="let option of userForm.controls.type.controls.options.controls; let i=index">
            <textarea [formControlName]="i"></textarea>
         </div>
      </div>
</div>

所以,正如你所看到的,我有一个对象数组,我想使用label属性以显示它textarea。现在我明白了[object Object]。如果我改变options到一个简单的字符串数组,例如:['Option 1', 'Option 2'],然后一切正常。但我需要使用对象。所以,而不是:

<textarea [formControlName]="i"></textarea>

我努力了:

<textarea [formControlName]="option[i].label"></textarea>

但是,这不起作用。
如何使用对象数组?

This is Plunkr http://plnkr.co/edit/ypq0YgSkoP4ZdNVqbvZB?p=preview


您需要添加一个 FormGroup,其中包含您的label and value。这也意味着由表单创建的对象与您的构建具有相同的构建fields object.

ngOnInit() {
  // build form
  this.userForm = this.fb.group({
    type: this.fb.group({
      options: this.fb.array([]) // create empty form array   
    })
  });

  // patch the values from your object
  this.patch();
}

之后,我们使用 OnInit 中调用的方法修补该值:

patch() {
  const control = <FormArray>this.userForm.get('type.options');
  this.fields.type.options.forEach(x => {
    control.push(this.patchValues(x.label, x.value))
  });
}

// assign the values
patchValues(label, value) {
  return this.fb.group({
    label: [label],
    value: [value]
  })    
}

最后,这里有一个

Demo https://stackblitz.com/edit/angular-cgpqcq?file=src%2Fapp%2Fapp.component.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在响应式表单中使用对象数组作为控件 的相关文章

随机推荐

  • npm 在 eslint 报告末尾抛出错误

    我在打字稿项目上运行 eslint 时遇到问题 我有以下 package json 我在其中编写了一个运行 eslint 的脚本 name ts tutorial version 1 0 0 description main index j
  • AngularJS中触发输入文件点击事件

    我正在尝试模拟 AngularJS 中文件输入的单击事件 我见过工作 jQuery 示例 http jsfiddle net fEBFp 1 但我不想使用 jQuery use strict angular module MyApp con
  • type_info 不考虑简历限定符:这是对的吗?

    此代码打印 1 是正确的行为还是 g 4 5 的怪癖 include
  • 共享库构造函数不工作

    在我的共享库中 我必须在加载时进行某些初始化 如果我用 GCC 属性定义函数 attribute constructor 它不起作用 即当加载链接我的共享库的程序时它不会被调用 如果我将函数名称更改为 init 有用 显然使用 init a
  • Android 框架布局点击侦听器不起作用

    我有一个FrameLayout有两个嵌套LinearLayouts 我想要一个onClickListener for FrameLayout 经过搜索我得到了解决方案clickable false 这是我的布局文件
  • 有没有一种简单的方法可以将所有 jar 依赖项复制到 XSBT 0.11.2 中的某个目录?

    当从旧版本的 SBT 切换到最新版本时 我们失去了快速获取所有 jar 依赖项并将它们复制到目录的能力 有没有一种简单的方法可以在 XSBT 0 11 2 中执行相同的操作 将以下内容添加到您的build sbt将所有依赖项复制到lib m
  • 无法在 Symfony 2 中使用渲染方法找到 Twig 模板

    我在尝试引用特定 Twig 模板时遇到问题 我正在使用render方法是 SF2 主控制器的一部分 但我显然没有正确引用 使用它 这是我的目录 文件结构 src AyrshireMinis CommonBundle Controller D
  • 如何根据用户输入退出 while(1) ?

    我有一个简单的server client终端 服务器从客户端接收字符串并对其进行处理 服务器只有收到后才会开始处理end of input在我的例子中的角色是 下面的 while 循环旨在允许用户输入多个不同的字符串 并且应该在接收到时停止
  • C 数组到 PyArray

    我正在编写一个 Python C 扩展 而不使用 Cython 我想在 C 中分配一个双精度数组 在内部函数 恰好在 Fortran 中 中使用它并返回它 我指出 C Fortran 接口在 C 中运行得很好 static PyObject
  • 时间序列分析 - 不均匀间隔的度量 - pandas + statsmodels

    我有两个 numpy 数组 light points 和 time points 想对这些数据使用一些时间序列分析方法 然后我尝试了这个 import statsmodels api as sm import pandas as pd td
  • 一对多关系中的 Django 查询

    我有 2 个表 Order 和 OrderDetails 在 OrderDetails 上我有一个字段 product type 我想从 Order 表中获取列表中的所有 Product type 字段 Order objects filt
  • Visual Studios 2010 - Asp.net MVC 4 Beta - 粘贴长时间延迟且频繁崩溃

    嘿各位开发人员 免责声明 在这被标记为高天之前 我意识到 asp net mvc 4 版本是 Beta 我并不期望完美 但该版本是全新的 所以实际上没有太多用户信息 我可以找到 讨论 IDE 问题 问题 我安装了 Asp net MVC 4
  • 共享模块无法立即使用 - Angular 13

    我读过其他答案 但没有成功地使用 Angular 13 实现联合模块 我总是收到 共享模块不可用于急切消费 的消息 TL DR 仔细检查自定义 webpack 配置中的公共路径 它可能缺少尾随 WebPack 可能会错误地报告为 无法立即使
  • Android 会话在 IBM Websphere Server 中丢失

    每当我从 Android 设备点击登录页面时 都必须创建并维护一个会话 直到用户点击注销按钮 但是 IBM Websphere 服务器似乎存在一个奇怪的问题 我能够成功登录 但是当我尝试请求一些其他数据 但会话从服务器丢失 在 Apache
  • 如何从一个类(窗口 UI)访问另一个类中的 QString 值?

    我即将编写一个小型桌面应用程序来记录同事的工作时间 它必须根据我们的需求进行定制 因此商业解决方案不是一种选择 我们没有钱 我正在使用 Qt 5 11 2 和 C 我有一个 MainWindow 第一个窗口 UI 它使用自动完成功能从 sq
  • 用 twig 对对象数组进行排序

    我需要订购我收到的带有内部属性的对象列表 I receive a list of objects like that match italy germany date 27 01 2019 competion World cup match
  • 使用 Python 的 optparse 模块,如何创建一个采用可变数量参数的选项?

    与 Perl 的Getopt Long您可以轻松定义采用可变数量参数的命令行选项 foo pl files a txt verbose foo pl files a txt b txt c txt verbose 有没有办法直接用Pytho
  • Windows Phone 7 和本机 C++/CLI

    Microsoft 最近为其新的 Phone 7 平台发布了工具和文档 令那些拥有大量 C 代码库 如我 的人感到沮丧的是 该平台不再支持本机开发 尽管我发现有人猜测这一决定会被推翻 但我对此表示怀疑 所以我在想 通过将这个代码库调整为在
  • 将未知高度的文本垂直居中于未知高度的 div 中

    我知道这是一个常见问题 而且我已经问过类似的问题 但这次我找不到解决方案 我正在尝试将文本垂直居中 该文本在可以具有不同高度的 DIV 中可以具有不同的高度 我试图仅使用 CSS 来解决这个问题 而不涉及 HTML 例子 http jsfi
  • 如何在响应式表单中使用对象数组作为控件

    我需要动态创建textarea对于表格 我有以下模型 this fields isRequired true type options label Option 1 value 1 label Option 2 value 2 并形成 th