angular - Angular 6 Reactive Forms 动态复选框
问题描述
对于我的生活,我无法弄清楚如何让 Angular 6 Reactive 表单与动态复选框配合得很好。我将尝试发布一个简单的 senario。
假设我有一个 AJAX 调用,它返回以下类型的数据
{
"name": "Name1",
"items": [{type: "banna"}, {type: "apple"}]
},
{
"name": "Name2",
"items": [{type: "orange"}, {type: "strwberry"}]
}
我只是想在屏幕上添加 4 个复选框(我可以通过多种方式进行操作),但我不知道如何使用响应式表单将它们插入
假设它是数据库中的现有记录,我还需要重新水化表单
在这个星球上怎么能做到这一点?任何例子都可以
解决方案
表单的模型不必与对象的结构完全匹配。
您需要做的就是创建适当的结构,以便使用复选框轻松编辑它,然后,当您提交表单时,将其转换为您想要的结构。
编辑前先变换
{
"name": "Name1",
"items": [{type: "banana"}, {type: "apple"}]
}
进入
{
"name": "Name1",
fruits: {
banana: true,
apple: true,
strawberry: false,
orange: false
}
}
如果原始对象中存在该类型的项目,则将每个水果设置为 true。
将复选框映射到这 4 种水果现在很简单,因为复选框的值是真或假。
假设用户通过选中/取消选中复选框来编辑对象,从而将其变成
{
"name": "Name2",
fruits: {
banana: false,
apple: true,
strawberry: true,
orange: false
}
}
现在提交时,您只需将该结构转换回您想要的:
{
"name": "Name2",
"items": [{type: "strawberry"}, {type: "apple"}]
}
通过遍历水果的键,过滤那些为真的,并将该类型的项目添加到项目数组中。
推荐阅读
- sql - 用于删除具有不同条件的多个值的 SQL 窗口函数
- html - 调整大小时对齐项目
- dynamics-crm - 从 Microsoft Flow 中的营销列表 (Dynamics CRM) 中获取所有联系人
- vue.js - 如何在 nuxt 页面 validate() 中访问当前实例?
- javascript - 将服务器端数据共享到 JS 文件
- c# - 检查要归档的 pdf 内容以发现 pdf 受密码保护
- excel - 根据 A 列数据将不同数量的 B 列单元格中的数据转换为单个逗号分隔的行
- javascript - VueJS忽略全局导入
- rust - 如何返回 &str 的向量?
- javascript - 在 React 中作为道具传递时区分 img 和 svg