最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue+ElementUI怎么處理超大表單實例講解

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

最近公司由于業(yè)務的調(diào)整,之前的超長表單的邏輯改動較多,所以我就打算重構了(之前是一個已離職的后臺寫的,也沒有注釋,一個組件寫了4000+行,實在有心無力)。為了各位方便閱讀,我這里把項目里拆分了14個組件進行了精簡。

整體思路

  • 大表單根據(jù)業(yè)務模塊進行拆分
  • 保存時使用el-form提供的validate方法進行校驗(循環(huán)對每一個拆分的組件進行校驗)
  • mixin 對每個組件的公共提取(也利于后期項目的維護)

開始

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

這里兩個組件為什么ref、model綁定的都是form后邊會進行說明(為了方便后期維護)

// 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: '請輸入姓名', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    // 這里是是為了父組件循環(huán)調(diào)用校驗
    validForm() {
        let result = false
        this.$refs.form.validate(valid => valid && (result = true))
        return result
    }
    // 我這里還用了另一種方式寫的,但是循環(huán)校驗的時候是promise對象,有問題,望大佬們指點一二
    validForm() {
        // 明明這里輸出的結構是 Boolean 值,但在父組件循環(huán)調(diào)用之后就是promise類型,需要轉換一下才行
        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: '請輸入年齡', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    // 這里是是為了父組件循環(huán)調(diào)用校驗
    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">報錯</el-button>
    </div>
</template>
<script>
... 省略引用
export default {
    name: 'parent',
    ... 省略注冊
    data () {
        return {
            formData: {
                form1: {},
                form2: {}
            }
        }
    },
}
</script>

由于formData里的屬性名form1和form2分別用在子表單組件的ref上,因此可以在遍歷時依次找到他們,修改保存函數(shù),代碼如下:

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

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

  • 通過對比我們可以發(fā)現(xiàn)form1 form2有共同的 props methods
  • 我們通過 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,并在對應組件中刪除相應的屬性和方法即可

結尾

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

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

相關文章

  • vue2.x?el-table二次封裝實現(xiàn)編輯修改

    vue2.x?el-table二次封裝實現(xiàn)編輯修改

    本文主要介紹了vue2.x?el-table二次封裝實現(xiàn)編輯修改,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue.js監(jiān)聽select2的值改變進行查詢方式

    Vue.js監(jiān)聽select2的值改變進行查詢方式

    這篇文章主要介紹了Vue.js監(jiān)聽select2的值改變進行查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue實現(xiàn)動態(tài)顯示表單項填寫進度功能

    Vue實現(xiàn)動態(tài)顯示表單項填寫進度功能

    這篇文章主要介紹了Vue實現(xiàn)動態(tài)顯示表單項填寫進度功能,此功能可以幫助用戶了解表單填寫的進度和當前狀態(tài),提高用戶體驗,通常實現(xiàn)的方式是在表單中添加進度條,根據(jù)用戶填寫狀態(tài)動態(tài)更新進度條,感興趣的同學可以參考下文
    2023-05-05
  • vue上傳文件formData上傳的解決全流程

    vue上傳文件formData上傳的解決全流程

    這篇文章主要介紹了vue上傳文件formData上傳的解決全流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue兩個組件間值的傳遞或修改方式

    vue兩個組件間值的傳遞或修改方式

    這篇文章主要介紹了vue兩個組件間值的傳遞或修改的實現(xiàn)代碼,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • npm?install安裝報錯的幾種常見情況

    npm?install安裝報錯的幾種常見情況

    當你跑起一個項目的時候,第一步需要先安裝依賴npm install,下面這篇文章主要給大家介紹了關于npm?install安裝報錯的幾種常見情況,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 教你用Cordova打包Vue項目的方法

    教你用Cordova打包Vue項目的方法

    這篇文章主要介紹了教你用Cordova打包Vue項目的方法,詳細的介紹了如何Vue項目打包成app,具有一定的參考價值,有興趣的可以了解一下
    2017-10-10
  • 深入理解vue-router之keep-alive

    深入理解vue-router之keep-alive

    本篇文章主要介紹了深入理解vue-router之keep-alive。keep-alive使被包含的組件保留狀態(tài),或避免重新渲染,有興趣的可以了解一下
    2017-08-08
  • vue input實現(xiàn)點擊按鈕文字增刪功能示例

    vue input實現(xiàn)點擊按鈕文字增刪功能示例

    這篇文章主要介紹了vue input實現(xiàn)點擊按鈕文字增刪功能,涉及基于vue.js的事件響應及頁面元素屬性動態(tài)操作相關實現(xiàn)技巧,需要的朋友可以參考下
    2019-01-01
  • Vue基礎語法知識梳理上篇

    Vue基礎語法知識梳理上篇

    這篇文章主要介紹了Vue基礎語法知識梳理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-12-12

最新評論

习水县| 新昌县| 德州市| 永吉县| 岳西县| 普兰店市| 额敏县| 杭州市| 蒲城县| 大冶市| 将乐县| 阳原县| 茂名市| 苗栗县| 威海市| 深圳市| 伊宁市| 翁牛特旗| 湟中县| 鹤岗市| 乐山市| 蓬安县| 都兰县| 阜新市| 崇明县| 星子县| 漾濞| 山丹县| 宕昌县| 曲靖市| 玉林市| 平舆县| 新野县| 邮箱| 乌苏市| 日土县| 东光县| 师宗县| 磐石市| 义马市| 合阳县|