文檔驅動 —— 表單組件(三):基於原生html的表單組件demo


做增刪改查要寫多少代碼?

一個表單一套代碼,十個表單十套代碼嗎?

我這么懶,怎么會寫這么多代碼?
我想做到:即使一百個表單也只需要一套代碼(而且不需要復制粘貼)。實現多個表單,只需要加載不同的meta即可。

Meta結構部分上一個已經寫了,這里說一下如何做表單。

表單demo

先做兩個簡單的表單,一個是公司信息,一個是員工信息。
代碼很簡單,先做一個簡單的菜單:

菜單

    <div style="background-color:#dddddd;height:600px;width:100px;float:left;">
      <a href="#" @click="myClick('companyForm')">公司信息</a> <br>
      <a href="#" @click="myClick('personForm')">員工信息</a>
    </div>

表單

然后用v-for把循環出來,然后把組件放進去,

    <div style="background-color:#eee;height:600px;width:400px;float:left;">
      <table>
        <tr v-for="(item,index) in metaInfo" :key="index">
          <td align="right">{{item.title}}:
          </td>
          <td align="left">
            <nfInput v-model="modelValue[item.colName]" :meta="item" />
          </td>
        </tr>
      </table>
    </div>

加載json

然后在setup里面加載json,設置好meta,再順便動態創建一個model,就ok了。

<script>
import { ref } from 'vue'
// import nfHelp from '@/components/nf-meta-help.vue'
import nfInput from '@/components/nf-form-item.vue'

export default {
  name: 'FormDemo',
  components: {
    // nfHelp,
    nfInput
  },
  setup () {
    const json = require('./FormDemo.json') // 加載meta信息,json格式
    const modelValue = ref({}) // 放數據的model
    const metaInfo = ref(json.companyForm) // 表單需要的meta信息
    const myClick = (key) => {
      // 更換表單的meta
      metaInfo.value = json[key]
      // 創建model
      modelValue.value = {}
      for (var k in metaInfo.value) {
        var item = metaInfo.value[k]
        modelValue.value[item.colName] = ''
      }
    }
    myClick('companyForm')
    return {
      modelValue,
      metaInfo,
      myClick
    }
  }
}
</script>

運行效果。

點擊菜單,並不是切換“頁面”,也不是切換組件,而是更改meta,meta一變,表單就變了,是不是很簡單,這樣表單再多也不用擔心做不過來了

Model

可以事先做好放在meta里面,也可以動態創建出來,我這么懶當然選擇動態創建了。簡單結構的model都是沒啥問題的。

one more thing

后面要做查詢組件了,這個更牛叉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM