• elementUI中的table动态表单记录


    form表单与table一起使用

    之前一直以为form表单是单独使用,现在联动起来发现只是套了一层外壳,并不是很麻烦的事情

    form的单独使用

    1. <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
    2. <el-form-item label="密码" prop="pass">
    3. <el-input type="password" v-model="ruleForm.pass" autocomplete="off">el-input>
    4. el-form-item>
    5. <el-form-item label="确认密码" prop="checkPass">
    6. <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off">el-input>
    7. el-form-item>
    8. <el-form-item label="年龄" prop="age">
    9. <el-input v-model.number="ruleForm.age">el-input>
    10. el-form-item>
    11. <el-form-item>
    12. <el-button type="primary" @click="submitForm('ruleForm')">提交el-button>
    13. <el-button @click="resetForm('ruleForm')">重置el-button>
    14. el-form-item>
    15. el-form>

    form与table的联合

    在table的column中使用solot 将form-item放入。需要注意的还是数据格式与rules

    form内使用的是input输入框,它所绑定的值当前行数据的属性  原来的写法是form表单绑定form后 使用form.xxx进行绑定。现在采用的是table,绑定值变成了scope.row.xxx.

    因为我写的是动态添加表格数据,所以prop采用index拼接的方式

    1. <el-form ref="ruleForm" :model="form" :rules="form.rules">
    2. <el-table class="box-table" :data="form.tableData" border >
    3. <el-table-column label="标题" align="center">
    4. <template slot-scope="scope">
    5. <el-form-item
    6. :prop="'tableData.' + scope.$index + '.title'"
    7. :rules="form.rules.title"
    8. >
    9. <el-input
    10. v-model.trim="scope.row.title"
    11. size="small"
    12. placeholder="请输入标题名称"
    13. />
    14. el-form-item>
    15. template>
    16. el-table-column>
    17. el-table>
    18. el-form>

    数据格式

    1. form{
    2. tableData:[],
    3. rules:{}
    4. }

    el-table中的index

    Table-column Attributes

    参数说明类型可选值默认值
    type对应列的类型。如果设置了 selection 则显示多选框;如果设置了 index 则显示该行的索引(从 1 开始计算);如果设置了 expand 则显示为一个可展开的按钮stringselection/index/expand
    index如果设置了 type=index,可以通过传递 index 属性来自定义索引number, Function(index)-
    1. <el-table-column
    2. label="序号"
    3. align="center"
    4. type="index"
    5. width="70px"
    6. :index="indexMethod"
    7. sortable
    8. />
    1. // 将数字转换为A-Z 一直到AZ-ZZ的转换方法
    2. indexMethod(number) {
    3. var ordA = "A".charCodeAt(0);
    4. var ordZ = "Z".charCodeAt(0);
    5. var len = ordZ - ordA + 1;
    6. var s = "";
    7. while (number >= 0) {
    8. s = String.fromCharCode((number % len) + ordA) + s;
    9. number = Math.floor(number / len) - 1;
    10. }
    11. return s;
    12. },

    可增删表格数据

    点击当前行时候在当前行后面新增一条数据,点击当前行删除当前行,点击在最后添加一行

    1. // 增加一行
    2. addRow() {
    3. const row = {
    4. title: "",
    5. };
    6. this.form.tableData.push(row);
    7. // console.log(row);
    8. },
    9. // 删除指定行
    10. delRow(index) {
    11. this.form.tableData.splice(index, 1);
    12. },
    13. // 指定位置插入行
    14. addRowIndex(index) {
    15. const row = {
    16. title: "",
    17. this.form.tableData.splice(index + 1, 0, row);
    18. });
    19. },

    表单校验

    表单校验与原来的方式是一样的,需要将rules写在form表单中

    1. <el-form-item
    2. :prop="'tableData.' + scope.$index + '.select'"
    3. :rules="form.rules.select"
    4. >

    因为后续进行动态添加表单,prop采用拼接index的方式,rules需要写全属性

    但是存在一个问题,点击产生新表单后,例如index为 3,4,5的。点击验证后3表单存在错误提示,直接删除数据3,数据4的验证就会出现原来3号数据的错误提示。不会进行重新验证。

    这里我采用的办法是在新增时候岁所有填入数据进行验证,验证成功后才可进行新增,删除行数据是直接进行删除。将错误信息也进行了删除不回影响数据显示。

    如果有更好的方式希望能够提醒我下。我这没有使用el-table的新增。还是比较麻烦的写法

  • 相关阅读:
    【SaaS应用程序】上海道宁为您提供研究数据管理-库存管理-调度工具——LabArchives
    SFI立昌在Telecom通讯行业的方案与应用
    搭建个人网站大体流程
    因使用 Cookie 引发的 15 亿“天价”罚单
    CryptoCTF easy
    TCP缓存
    商家码收钱扣手续费吗
    java校园论坛贴吧系统分享
    DSPE-PEG-MMPs; PEG-MMPs-DSPE ;聚乙二醇-基质金属蛋白酶-磷脂 ;磷脂-聚乙二醇-基质金属蛋白酶
    Shell脚本之正则表达式详解
  • 原文地址:https://blog.csdn.net/a99101/article/details/132620180