elementUI动态添加表单项并添加验证

elementUI动态添加表单项并添加验证

在使用elementUI动态添加表单项并添加验证的时候踩了一些坑,在此记录一下

在这里插入图片描述

代码:

<el-form :label-position="labelPosition" :ref="form" :model="form" label-width="120px" :inline="true" style="overflow: hidden;margin-left: 180px;margin-top: 30px">
      <el-col :span="14">
        <el-form-item label="采购类型:" prop="goods_type" :rules="rules.goods_type">
          <el-select v-model="form.goods_type" placeholder="请选择" @change="queryApprove" >
            <el-option v-for="option in typeOptions" :key="option.Value" :label="option.Text" :value="option.Value"></el-option>
          </el-select>
        </el-form-item>
        <div v-for="(item,index) in form.purchase_list">
          <el-form-item label="物品名称:" prop="goods_type" :rules="rules.goods_type">
            <el-select v-model="item.goods_name" placeholder="请选择" @change="queryApprove" >
              <el-option v-for="option in typeOptions" :key="option.Value" :label="option.Text" :value="option.Value"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item>
            <el-button type="text" style="margin-left:190px"  @click="deleteItems(item, index)" icon="el-icon-delete" v-show="index>0" >删除</el-button>
          </el-form-item>
          <el-form-item label="物品单价:" :prop="'purchase_list.'+index +'.goods_price'" :rules="rules.goods_price">
          <el-input-number  :min="0.1" v-model="item.goods_price"></el-input-number>
        </el-form-item>
        <el-form-item label="数量:"  :prop="'purchase_list.'+index +'.goods_qty'" :rules="rules.goods_qty">
          <el-input-number  :min="1" v-model="item.goods_qty"></el-input-number>
        </el-form-item>
        </div>
        <el-form-item>
          <el-button type="text" @click="addItem" style="position: relative;left:120px"><i class="el-icon-circle-plus"></i>新增采购物品</el-button>
        </el-form-item>
        <el-form-item label="采购事由:" prop="purchase_reason" :rules="rules.purchase_reason" style="display:block;">
          <el-input type="textarea" :rows="4" v-model="form.purchase_reason" placeholder="请输入申请理由" style="width: 493px" ></el-input>
        </el-form-item>
        <el-form-item label="审批人:" prop="approve_person" :rules="rules.approve_person">
          <el-select v-model="form.approve_person" placeholder="请选择" >
            <el-option v-for="item in approveOptions" :key="item.PersonId" :label="item.Name" :value="item.PersonId"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item style="display: block;position: relative;left:120px">
          <el-button class="submit-button" @click="submitForm(form)">提交</el-button>
        </el-form-item>
      </el-col>
    </el-form>

数据部分:

     form: {
          goods_type:'',
          purchase_list:[{
            goods_name:'',
            goods_price:'',
            goods_qty:''
          }],
          purchase_reason: '',
          approve_person:''
        },

表单验证:

rules: {
          goods_name: [
            {required: true, message: '请输入采购物品名称', trigger: 'blur' }
          ],
          goods_type: [
            { required: true, message: '请选择采购物品类型', trigger: 'change' }
          ],
          purchase_reason: [
            { required: true, message: '请输入采购事由', trigger: 'blur' },
            { min: 10, max: 200, message: '长度在 10 到 200 个字符', trigger: 'blur' }
          ],
          goods_price:[
            { required: true, message: '请输入采购物品单价'},
          ],
          goods_qty:[
            { required: true, message: '请输入采购物品数量'},
          ],
          approve_person:[
            {required: true, message: '请选择审批人', trigger: 'change'}
          ]
        }

部分方法:

/*动态新增表单项*/
      addItem(){
        this.form.purchase_list.push({
          goods_name:'',
          goods_price:'',
          goods_qty:''
        })
      },
/*删除新增的表单项*/
      deleteItems(item, index) {
        this.index = this.form.purchase_list.indexOf(item);
        if (index !== -1) {
          this.form.purchase_list.splice(index, 1)
        }
      },

由于原页面是没有动态添加表单项的,在做验证的时候踩了一些坑。

首先,这里需要把prop改成:prop并且添加内容,例如::prop="‘purchase_list.’+index +’.goods_price’" ,其中第一个参数为被循环的数组的名称,第二个参数为数组中对应的字段名称

这里注意,需要动态添加的表单项与正常表单项做验证有区别,普通表单只需要在el-form标签中指定:rules同时每个表单项的prop与验证规则中的名称一致即可。但是动态添加的表单项需要将:rules单独放在el-form-item标签中,我是直接将所有的验证都放在了el-form-item标签中,为了美观。具体代码可以参考上文

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Element UI 是一个基于 Vue.js 的组件库,提供了丰富的 UI 组件和功能。如果要使用 Element UI 实现表单验证,可以通过以下步骤进行操作: 1. 安装 Element UI:在 Vue 目中使用 Element UI,首先需要在目中安装 Element UI 库。可以通过 npm 或 yarn 进行安装。 ```bash npm install element-ui ``` 2. 引入 Element UI 组件:在需要使用表单验证的页面或组件中,引入 Element UI 的 form 组件。 ```javascript import { Form, FormItem, Input, Button } from 'element-ui'; ``` 3. 创建表单:在模板中使用 `<el-form>` 标签创建表单,并设置相关属性。 ```html <template> <el-form :model="form" :rules="rules" ref="form" label-width="80px"> <!-- 表单 --> </el-form> </template> ``` 4. 定义表单验证规则:在 Vue 实例或组件的 `data` 属性中,定义表单验证规则。 ```javascript data() { return { form: { // 表单数据 }, rules: { // 表单验证规则 }, }; }, ``` 5. 添加表单:在 `<el-form>` 标签内部添加表单,并设置相应的验证规则。 ```html <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> </el-form-item> ``` 6. 添加提交按钮:在表单添加提交按钮,可以使用 `<el-button>` 组件。 ```html <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> ``` 7. 编写提交方法:在 Vue 实例或组件中,编写提交表单的方法,并在该方法中使用 `$refs` 获取表单实例,调用其 `validate` 方法进行表单验证。 ```javascript methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 表单验证通过,进行提交操作 } else { // 表单验证未通过 } }); }, }, ``` 以上就是使用 Element UI 实现表单验证的基本步骤。你可以根据自己的需求,对表单进行进一步的配置和定制。请注意,这只是一个简单的示例,实际目中可能涉及到更复杂的验证规则和逻辑。更多详细的用法可以参考 Element UI 的官方文档。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值