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

Vue+ElementUI怎么處理超大表單實(shí)例講解

 更新時(shí)間:2021年11月23日 08:33:01   作者:青燈夜游  
在本篇文章里小編給大家整理的是一篇關(guān)于Vue+ElementUI怎么處理超大表單實(shí)例講解內(nèi)容,以后需要的朋友可以跟著學(xué)習(xí)參考下。

最近公司由于業(yè)務(wù)的調(diào)整,之前的超長(zhǎng)表單的邏輯改動(dòng)較多,所以我就打算重構(gòu)了(之前是一個(gè)已離職的后臺(tái)寫(xiě)的,也沒(méi)有注釋,一個(gè)組件寫(xiě)了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ù))

開(kāi)始

這里以拆分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
    }
    // 我這里還用了另一種方式寫(xiě)的,但是循環(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里的屬性名form1和form2分別用在子表單組件的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)的屬性和方法即可

結(jié)尾

  • 超大表單解決起來(lái)很麻煩,這里只是對(duì)組件的拆分
  • 組件之間的聯(lián)動(dòng)也是一大難點(diǎn),等下次整理完再發(fā)出來(lái)

到此這篇關(guān)于Vue+ElementUI怎么處理超大表單實(shí)例講解的文章就介紹到這了,更多相關(guān)Vue+ElementUI怎么處理超大表單內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ant-design-vue中設(shè)置Table每頁(yè)顯示的條目數(shù)量方式

    ant-design-vue中設(shè)置Table每頁(yè)顯示的條目數(shù)量方式

    這篇文章主要介紹了ant-design-vue中設(shè)置Table每頁(yè)顯示的條目數(shù)量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • dataV大屏在vue中的使用方式

    dataV大屏在vue中的使用方式

    這篇文章主要介紹了dataV大屏在vue中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vitepress的文檔渲染基礎(chǔ)教程

    Vitepress的文檔渲染基礎(chǔ)教程

    這篇文章主要為大家介紹了Vitepress的文檔渲染基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Vue 過(guò)渡(動(dòng)畫(huà))transition組件案例詳解

    Vue 過(guò)渡(動(dòng)畫(huà))transition組件案例詳解

    這篇文章主要介紹了Vue 過(guò)渡(動(dòng)畫(huà))transition組件案例詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2017-01-01
  • vue中$event使用之獲取當(dāng)前元素及相關(guān)元素

    vue中$event使用之獲取當(dāng)前元素及相關(guān)元素

    這篇文章主要介紹了vue中$event使用之獲取當(dāng)前元素及相關(guān)元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vuex 動(dòng)態(tài)注冊(cè)方法 registerModule的實(shí)現(xiàn)

    vuex 動(dòng)態(tài)注冊(cè)方法 registerModule的實(shí)現(xiàn)

    這篇文章主要介紹了vuex 動(dòng)態(tài)注冊(cè)方法 registerModule的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • vue 數(shù)據(jù)遍歷篩選 過(guò)濾 排序的應(yīng)用操作

    vue 數(shù)據(jù)遍歷篩選 過(guò)濾 排序的應(yīng)用操作

    這篇文章主要介紹了vue 數(shù)據(jù)遍歷篩選 過(guò)濾 排序的應(yīng)用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Vue獲取input值的四種常用方法

    Vue獲取input值的四種常用方法

    Vue是一種流行的Web開(kāi)發(fā)框架,它提供了一個(gè)雙向綁定的語(yǔ)法糖。在Vue中,我們可以很容易地獲取頁(yè)面上的數(shù)據(jù),并且可以實(shí)時(shí)的響應(yīng)其變化,這篇文章主要給大家介紹了關(guān)于Vue獲取input值的四種常用方法,需要的朋友可以參考下
    2023-09-09
  • 淺析vue中的nextTick

    淺析vue中的nextTick

    這篇文章主要介紹了vue中nextTick的相關(guān)資料,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • Vue2 模板template的四種寫(xiě)法總結(jié)

    Vue2 模板template的四種寫(xiě)法總結(jié)

    下面小編就為大家分享一篇Vue2 模板template的四種寫(xiě)法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02

最新評(píng)論