欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐

 更新時(shí)間:2022年05月29日 10:46:05   作者:水冗水孚  
在項(xiàng)目開發(fā)中,我們經(jīng)常會(huì)遇到表單保存的功能,本文主要介紹了v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>

問題描述

在項(xiàng)目開發(fā)中,我們經(jīng)常會(huì)遇到表單保存的功能,在表單保存前,常常需要做表單必填項(xiàng)的校驗(yàn),校驗(yàn)通過以后才去發(fā)請(qǐng)求保存表單數(shù)據(jù)。

但是,這個(gè)表單如果是動(dòng)態(tài)的,即:可以新增相同的表單。比如這個(gè)表單有輸入框和下拉框需要校驗(yàn),點(diǎn)擊添加表格按鈕,再新增一個(gè)相同的表單,同樣新的這個(gè)表單對(duì)應(yīng)的輸入框和下拉框也需要校驗(yàn)。

本文記錄一下對(duì)應(yīng)代碼寫法思路,我們先看一下效果圖:

效果圖

代碼思路

  • 表單的主數(shù)據(jù)是要寫成對(duì)象形式 :model="ruleForm" 不過既然是要?jiǎng)討B(tài)的,肯定是要循環(huán)呢,所以,可以寫成這樣:
ruleForm: {
        // 動(dòng)態(tài)循環(huán)項(xiàng)數(shù)組
        formItemArr: [
          {
            name: "",
            gender: "",
          },
        ],
      },
  • 點(diǎn)擊添加表格的時(shí)候,就可以直接push對(duì)應(yīng)項(xiàng)就行啦,即,這樣:
// 添加一個(gè)表格
    addForm() {
      let itemObj = {
        name: "",
        gender: "",
      };
      this.ruleForm.formItemArr.push(itemObj);
    },
  • 重點(diǎn)來嘍,因?yàn)槭茄h(huán)的,所以prop也要變成動(dòng)態(tài)的了,要拼接上index,就變成根據(jù)索引去找對(duì)應(yīng)的校驗(yàn)項(xiàng)了,即為::prop="'formItemArr.' + index + '.name'" ,這樣的話,就變成了:prop="formItemArr.0.name"、prop="formItemArr.1.name"prop="formItemArr.2.name" ... 這樣的話,就可以照顧到每一項(xiàng)中的每一個(gè)綁定的值了,校驗(yàn)就不會(huì)漏掉

  • 校驗(yàn)規(guī)則寫成內(nèi)聯(lián)就可以觸發(fā)校驗(yàn)函數(shù)this.$refs["ruleForm"].validate((val) => {})

<el-form-item
          label="姓名"
          :prop="'formItemArr.' + index + '.name'"
          :rules="{
            required: true,
            message: '請(qǐng)?zhí)顚?,
            trigger: 'blur',
          }"
        >
        ......

完整代碼

演示的話,大家直接復(fù)制粘貼即可

<template>
  <div class="box">
    <el-button @click="addForm" size="mini" type="primary" plain
      >添加表格</el-button
    >
    <el-button @click="saveForm" size="mini" type="primary" plain
      >保存表格</el-button
    >
    <br />
    <br />
    <el-form
      :model="ruleForm"
      ref="ruleForm"
      label-width="100px"
      class="formform"
    >
      <div
        class="formformItemClass"
        v-for="(item, index) in ruleForm.formItemArr"
        :key="index"
      >
        <el-form-item
          label="姓名"
          :prop="'formItemArr.' + index + '.name'"
          :rules="{
            required: true,
            message: '請(qǐng)?zhí)顚?,
            trigger: 'blur',
          }"
        >
          <el-input
            size="mini"
            v-model.trim="item.name"
            placeholder="請(qǐng)?zhí)顚?
            style="width: 200px"
          ></el-input>
        </el-form-item>
        <el-form-item
          label="性別"
          :prop="'formItemArr.' + index + '.gender'"
          :rules="{
            required: true,
            message: '請(qǐng)選擇',
            trigger: 'change',
          }"
        >
          <el-select
            clearable
            size="mini"
            v-model="item.gender"
            placeholder="請(qǐng)選擇"
          >
            <el-option label="男" value="男"></el-option>
            <el-option label="女" value="女"></el-option>
          </el-select>
        </el-form-item>
      </div>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      ruleForm: {
        // 動(dòng)態(tài)循環(huán)項(xiàng)數(shù)組
        formItemArr: [
          {
            name: "",
            gender: "",
          },
        ],
      },
    };
  },
  methods: {
    // 添加一個(gè)表格
    addForm() {
      let itemObj = {
        name: "",
        gender: "",
      };
      this.ruleForm.formItemArr.push(itemObj);
    },
    // 保存表格
    saveForm() {
      this.$refs["ruleForm"].validate((val) => {
        if (val) {
          console.log("符合要求,保存成功", this.ruleForm);
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    },
  },
};
</script>

<style lang="less" scoped>
.box {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  padding: 24px;
  .formform {
    width: 360px;
    .formformItemClass {
      padding-top: 24px;
      border: 2px dashed #ccc;
      margin-bottom: 18px;
    }
  }
}
</style>

到此這篇關(guān)于v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐的文章就介紹到這了,更多相關(guān)v-for el-form表單項(xiàng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論