中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Vue+ElementUI怎么處理超大表單

Vue+ElementUI怎么處理超大表單,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的新城網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

最近公司由于業(yè)務(wù)的調(diào)整,之前的超長(zhǎng)表單的邏輯改動(dòng)較多,所以我就打算重構(gòu)了(之前是一個(gè)已離職的后臺(tái)寫的,也沒(méi)有注釋,一個(gè)組件寫了4000+行,實(shí)在有心無(wú)力)。為了各位方便閱讀,我這里把項(xiàng)目里拆分了14個(gè)組件進(jìn)行了精簡(jiǎn)。

整體思路

  • 大表單根據(jù)業(yè)務(wù)模塊進(jìn)行拆分

  • 保存時(shí)使用el-form提供的validate方法進(jìn)行校驗(yàn)(循環(huán)對(duì)每一個(gè)拆分的組件進(jìn)行校驗(yàn))

  • mixin 對(duì)每個(gè)組件的公共提取(也利于后期項(xiàng)目的維護(hù))

開始

  • 這里以拆分2個(gè)組件為例:form1, form2(方便讀者觀看,命名勿噴)

  • 這里兩個(gè)組件為什么ref、model綁定的都是form后邊會(huì)進(jìn)行說(shuō)明(為了方便后期維護(hù))

// form1 組件
<template>
    <el-form
      ref="form"
      :model="form"
      label-width="10px"
    >
      <el-form-item label="姓名" prop="name">
          <el-input v-model="form.name" />
      </el-form-item>
    </el-form>
</template>
<script>
export default {
  name: 'Form1',
    props: {
      form: {}
  },
  data() {
    return {
      rules: {
        name: [
          { required: true, message: '請(qǐng)輸入姓名', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    // 這里是是為了父組件循環(huán)調(diào)用校驗(yàn)
    validForm() {
        let result = false
        this.$refs.form.validate(valid => valid && (result = true))
        return result
    }
    // 我這里還用了另一種方式寫的,但是循環(huán)校驗(yàn)的時(shí)候是promise對(duì)象,有問(wèn)題,望大佬們指點(diǎn)一二
    validForm() {
        // 明明這里輸出的結(jié)構(gòu)是 Boolean 值,但在父組件循環(huán)調(diào)用之后就是promise類型,需要轉(zhuǎn)換一下才行
        return this.$refs.form.validate().catch(e => console.log(e))
    }
  }
}
</script>

// form2 組件
<template>
    <el-form
      ref="form"
      :model="form"
      label-width="10px"
    >
      <el-form-item label="年齡" prop="age">
          <el-input v-model="form.age" />
      </el-form-item>
    </el-form>
</template>
<script>
export default {
  name: 'Form2',
  props: {
      form: {}
  },
  data() {
    return {
      rules: {
        name: [
          { required: true, message: '請(qǐng)輸入年齡', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    // 這里是是為了父組件循環(huán)調(diào)用校驗(yàn)
    validForm() {
        let result = false
        this.$refs.form.validate(valid => valid && (result = true))
        return result
    }
  }
}
</script>
  • 看一下父組件怎么引用的

// 父組件
<template>
    <div class="parent">
        <form1 ref="form1" :form="formData.form1" />
        <form2 ref="form2" :form="formData.form2" />
        <el-button type="primary" @click="save">報(bào)錯(cuò)</el-button>
    </div>
</template>
<script>
... 省略引用
export default {
    name: 'parent',
    ... 省略注冊(cè)
    data () {
        return {
            formData: {
                form1: {},
                form2: {}
            }
        }
    },
}
</script>
  • 由于formData里的屬性名form1form2分別用在子表單組件的ref上,因此可以在遍歷時(shí)依次找到他們,修改保存函數(shù),代碼如下:

methods: {
    save () {
        // 每個(gè)表單對(duì)象的 key 值,也就是每個(gè)表單的 ref 值
        const formKeys = Object.keys(this.formData)
        // 執(zhí)行每個(gè)表單的校驗(yàn)方法
        const valids = formKeys.map(item => this.$refs[item].validForm())
        // 所有表單通過(guò)檢驗(yàn)之后的邏輯
        if (valids.every(item => item)) {
          console.log(11)
        }
    }
}

解答為什么兩個(gè)組件ref、model綁定的都是form

  • 通過(guò)對(duì)比我們可以發(fā)現(xiàn)form1 form2有共同的 props methods

  • 我們通過(guò) mixin 提取一下

export default {
  props: {
    form: {
      required: true,
      type: Object,
      default: () => {}
    },
  },
  methods: {
    validForm () {
      let result = false
      this.$refs.form.validate(valid => valid && (result = true))
      return result
    }
  }
}
  • form1 form2 中引用該minix,并在對(duì)應(yīng)組件中刪除相應(yīng)的屬性和方法即可

  • 超大表單解決起來(lái)很麻煩,這里只是對(duì)組件的拆分

  • 組件之間的聯(lián)動(dòng)也是一大難點(diǎn),等下次整理完再發(fā)出來(lái)

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

新聞標(biāo)題:Vue+ElementUI怎么處理超大表單
網(wǎng)頁(yè)網(wǎng)址:http://www.rwnh.cn/article24/psjdje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)、全網(wǎng)營(yíng)銷推廣標(biāo)簽優(yōu)化、小程序開發(fā)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
阿坝县| 常宁市| 西和县| 苗栗市| 长岭县| 札达县| 昆明市| 泰来县| 鄢陵县| 广河县| 威信县| 民丰县| 巨野县| 安多县| 溧阳市| 西畴县| 什邡市| 楚雄市| 尚志市| 盐亭县| 桃源县| 湘潭市| 无极县| 迁安市| 托克逊县| 双牌县| 阿克陶县| 台南市| 清新县| 德昌县| 加查县| 丰宁| 崇文区| 舟曲县| 富川| 内乡县| 安西县| 津南区| 枝江市| 蛟河市| 卢湾区|