You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何将表单复选框数据绑定为JSON字符串存入数据库

实现复选框及评论数据转JSON并存储到数据库

1. 完善HTML表单结构

给每个复选框添加id属性,对应你定义的documentList中的字段;同时为每个选项补充评论输入框,设置匹配的id以关联数据:

<div class="my-3">
    <ejs-checkbox id="IsSpecifications" label="isSpecifications()" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="IsSpecificationscomment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="IsDrawSchedule" label="Drawings/Schedules" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="IsDrawSchedulecomment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="TqRfi" label="TQ’s / RFI’s" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="TqRficomment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="InsEnqReqQouInfor" label="Install Enquiry / request to quote information" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="InsEnqReqQouInforcomment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="PanEnqReqQouInfor" label="Panel Enquiry / request to quote information" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="PanEnqReqQouInforcomment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="PanSubContQuot" label="Panel Sub Contractor Quotation" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="PanSubContQuotcomment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="MccSchedule" label="MCC Schedules" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="MccScheduleComment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="ScPackQuot" label="Other S/C Package Quotations" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="ScPackQuotComment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="O3rdPartyQuot" label="Other 3rd Party Quotations" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="O3rdPartyQuotcomment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="EquipSchedule" label="Equipment Schedules" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="EquipScheduleComment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="PointSchedul" label="Points Schedules" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="PointSchedulComment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="ValveSchedul" label="Valve Schedules" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="ValveSchedulComment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="IdentRiskOpport" label="Identifed Risks and Opportunities (INCL. VALUE ENGINEERING)" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="IdentRiskOpportComment" placeholder="添加评论" class="form-control mt-1">
</div>
<div class="my-3">
    <ejs-checkbox id="InstSubContQuot" label="Install Sub Contractor Quotation" labelPosition="Before"></ejs-checkbox>
    <input type="text" id="InstSubContQuotComment" placeholder="添加评论" class="form-control mt-1">
</div>
<button id="submitForm" class="btn btn-primary mt-3">提交</button>

2. 实现数据绑定与JSON转换

通过JavaScript监听表单元素变化,实时更新documentList数组;提交时将数组转为JSON字符串发送到后端:

// 初始化数据数组
let documentList = [
    {'IsSpecifications': false, 'IsSpecificationscomment': ''},
    {'IsDrawSchedule': false, 'IsDrawSchedulecomment': ''},
    {'TqRfi': false, 'TqRficomment': ''},
    {'InsEnqReqQouInfor': false, 'InsEnqReqQouInforcomment': ''},
    {'PanEnqReqQouInfor': false, 'PanEnqReqQouInforcomment': ''},
    {'PanSubContQuot': false, 'PanSubContQuotcomment': ''},
    {'MccSchedule': false, 'MccScheduleComment': ''},
    {'ScPackQuot': false, 'ScPackQuotComment': ''},
    {'O3rdPartyQuot': false, 'O3rdPartyQuotcomment': ''},
    {'EquipSchedule': false, 'EquipScheduleComment': ''},
    {'PointSchedul': false, 'PointSchedulComment': ''},
    {'ValveSchedul': false, 'ValveSchedulComment': ''},
    {'IdentRiskOpport': false, 'IdentRiskOpportComment': ''},
    {'InstSubContQuot': false, 'InstSubContQuotComment': ''}
];

// 监听复选框状态变化
document.querySelectorAll('ejs-checkbox').forEach(checkbox => {
    checkbox.addEventListener('change', function() {
        const fieldName = this.id;
        const targetItem = documentList.find(item => Object.keys(item).includes(fieldName));
        if (targetItem) targetItem[fieldName] = this.checked;
    });
});

// 监听评论输入框内容变化
document.querySelectorAll('input[type="text"]').forEach(input => {
    input.addEventListener('input', function() {
        const fieldName = this.id;
        const targetItem = documentList.find(item => Object.keys(item).includes(fieldName));
        if (targetItem) targetItem[fieldName] = this.value;
    });
});

// 提交表单处理
document.getElementById('submitForm').addEventListener('click', function() {
    // 转换为JSON字符串
    const documentListJson = JSON.stringify(documentList);
    
    // 发送到后端接口
    fetch('/your-save-api', {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify({ documentlist: documentListJson })
    })
    .then(res => res.json())
    .then(data => console.log('存储成功:', data))
    .catch(err => console.error('存储失败:', err));
});

3. 后端存储逻辑(Node.js/Express示例)

后端接收JSON字符串后,直接存入数据库的documentlist字符串字段:

const express = require('express');
const app = express();
app.use(express.json());

// 假设使用Mongoose操作MongoDB
const YourModel = require('./your-model');

app.post('/your-save-api', async (req, res) => {
    try {
        const { documentlist } = req.body;
        await YourModel.create({ documentlist });
        res.status(200).json({ success: true });
    } catch (err) {
        res.status(500).json({ success: false, message: err.message });
    }
});

app.listen(3000, () => console.log('服务启动'));

关键注意事项

  • 确保复选框、评论输入框的id与documentList中的字段名完全一致,否则无法匹配更新数据。
  • 读取数据时,后端可通过JSON.parse()将字符串转回数组,方便后续业务处理。

内容的提问来源于stack exchange,提问作者ravindra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:30:45