成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue3 項目中,如何設計一個表單配置生成器?

開發 前端
組員們說以前開發一個表單需要:模板寫組件,配置屬性,配置規則,獲取實例,邏輯分散等等操作,并且每個人都不統一,所以我才決定開發一個統一的表單配置組件~當然這只是一個初步版本,后面會拓展其他新功能的!!!


背景

最近公司新開了一個 Vue3 的項目,并且讓我做了組長,并且交待說可以開發一些基礎組件,提高整個團隊的開發效率,于是我首先想到的是封裝一個表單配置組件,只需要傳入配置,就可以生成表單,減少組員的開發負擔~

源碼+示例:https://github.com/sanxin-lin/all-example/tree/main/form-factory

組員們說以前開發一個表單需要:模板寫組件,配置屬性,配置規則,獲取實例,邏輯分散等等操作,并且每個人都不統一,所以我才決定開發一個統一的表單配置組件~當然這只是一個初步版本,后面會拓展其他新功能的!!!

這個表單配置組件已經在項目中使用了,成員們都覺得大大提高開發效率,因為使用起來真的很簡單~初步調研,組員們說效率至少提升了30%!!!!!

具體使用方法如下,其實重要部分就四個部分:

1、表單選項:options

2、表單配置:config

3、表單狀態:formState

4、表單實例:formRef

定義完后,傳入 FormFactory 組件,便可以生成表單

思考

其實代碼不重要,我們要想想,實現這個東西需要注意哪些點,思路是怎么樣的,想要看完整源碼和示例的,可以看這里

源碼+示例:https://github.com/sanxin-lin/all-example/tree/main/form-factory

如何動態生成組件?

比如傳入的type: 'input'就會渲染Input組件,如果傳入type: 'select'就會渲染Select組件,要怎么去完成這件事呢?

其實很多人第一時間會想到 Vue 的 <component>

其實一開始我也是使用這種方式去做的,但是發現一個問題,這樣去做的話,那么插槽就做不了了~~

但是不同的 type 對應不同的 組件,這個思路是對的,所以需要維護一個對象

如何渲染插槽呢?

首先每個組件都會有自己的插槽,并且可能會重名,比如 Input 組件有 prefix 插槽,而 Select 也有 prefix 插槽,所以我們要防止沖突,就需要設置別名,比如下面的例子

  • Input 的 prefix 插槽,我別名成 input_prefix
  • Select 的 prefix 插槽,我別名成 select_prefix

接著只需要把別名插槽放進 FormFactory 里就行了

但是問題是內部的 Input 和 Select 不認 input_prefix 和 select_prefix,所以內部得把 input_prefix 和 select_prefix 轉成 Input 和 Select 各自的 prefix

接著,你想要渲染插槽,用模板里的 component 可能有點難做,所以我使用了 Vue 的 h 方法,沒有使用模板去做

圖片

如何更新狀態

內部組件更新值得時候,也要更新傳入的 model="formState",那么要怎么去做呢?我的做法是監聽每一個表單組件的更新事件,然后更新對應的字段,并且要區分 formState 是 ref 還是 reactive,我是使用了 isRef 來判斷

這里 reactive 的話我使用了 Object.assign 直接更新表單狀態,大家如果有更好的方法的話,可以私信告訴俺下~

圖片

多組件庫版本

我目前只做了 Ant-Design-Vue 版本,因為項目目前是使用了這個組件庫,但是一個好的表單配置,肯定要配置多個組件庫,所以我的想法是,設置一個基座,然后每一種組件庫都做一個版本,基座通過 provide 把 config、options 傳入各個版本中,用 inject 接收,然后拿著配置去做渲染

圖片

表單實例暴露

表單的實例 ref 也需要暴露出去,這樣才能方便開發者使用表單身上的方法,靈活地對表單進行操作

在基座上,傳入 setRef 方法

在各個版本的子項目中去設置實例

總結

思路差不多就是上面那樣,至于具體實現可以看下面鏈接。

源碼+示例:https://github.com/sanxin-lin/all-example/tree/main/form-factory

責任編輯:武曉燕 來源: 前端之神
相關推薦

2024-08-19 00:00:00

表單生成器開發開源

2024-10-07 08:52:59

分布式系統分布式 IDID

2020-09-08 11:21:48

SQL生成器跨庫

2019-01-24 09:46:38

PelicanPython生成器

2018-11-19 10:10:51

Python數據庫隨機生成器

2022-08-28 19:10:37

JavaScript二維碼源碼

2020-12-20 10:04:44

Qrcode二維碼生成器QR Code

2017-05-18 10:00:40

Linuxpandom隨機數生成器

2024-08-12 08:33:05

2022-09-20 11:00:14

Vue3滾動組件

2022-06-17 11:04:46

生成器計算

2024-06-12 13:40:58

2024-07-30 08:59:22

2022-07-25 10:27:36

背景生成器工具前端

2015-09-10 08:45:39

CSS3生成器

2024-01-22 13:15:00

2023-02-07 16:11:41

2023-09-14 08:46:50

ReactVue

2024-07-15 08:02:37

2020-12-09 08:34:24

css生成器設計師
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久777777 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 日韩电影免费在线观看中文字幕 | 欧美一区二区三区四区视频 | 国产第1页 | 天天综合永久入口 | 韩日一区二区 | 日韩免费一级 | 国产精品日韩欧美一区二区三区 | 99久久视频 | 午夜视频一区二区三区 | 亚洲综合一区二区三区 | 夜夜爽99久久国产综合精品女不卡 | 亚洲国产精品va在线看黑人 | 亚洲一区二区免费看 | 婷婷色在线播放 | 日日日干干干 | 精品日本久久久久久久久久 | 久久这里只有精品首页 | 精品欧美乱码久久久久久 | 国产成人精品一区二区三区在线观看 | 国产午夜精品一区二区三区四区 | 午夜精品福利视频 | 国产一二三区免费视频 | 高清一区二区三区 | 成人av网站在线观看 | 精品国产成人 | 国产一区二区三区久久久久久久久 | 九九热久久免费视频 | 涩涩视频大全 | 久久精品久久久久久 | 精品国产一区二区三区观看不卡 | 久久久高清 | 91色在线| 国产一区二区三区视频在线观看 | 91大神在线资源观看无广告 | 免费黄色录像视频 | 一区二区三区亚洲 | 久久999| 久久爱综合 | 成人高清在线视频 |