vue可視化表單設計器自定義組件使用方法
前言
有一款基于vue的可視化表單編輯器,直接雙擊或者拖拽組件,便可以創(chuàng)建一個表單,非常方便。今天為大家介紹這款編輯器:
github地址:https://github.com/vform666/variant-form
1.1界面圖片
1.如何使用?
兩種使用方法。
第一種,直接引用。正如github上所示,直接安裝整個插件使用。
1.1.1 安裝:
npm i vform-builds
1.1.2 項目中使用:
/ ******* 引入并全局注冊VForm組件 *******/ import Vue from 'vue' import App from './App.vue' import ElementUI from 'element-ui' //引入element-ui庫 import VForm from 'vform-builds' //引入VForm庫 import 'element-ui/lib/theme-chalk/index.css' //引入element-ui樣式 import 'vform-builds/dist/VFormDesigner.css' //引入VForm樣式 Vue.config.productionTip = false Vue.use(ElementUI) //全局注冊element-ui Vue.use(VForm) //全局注冊VForm(同時注冊了v-form-designer和v-form-render組件) new Vue({ render: h => h(App), }).$mount('#app')
1.1.3 使用編輯組件
<template> <v-form-designer></v-form-designer> </template> <script> export default { data() { return { } } } </script> <style lang="scss"> body { margin: 0; /* 如果頁面出現(xiàn)垂直滾動條,則加入此行CSS以消除之 */ } </style>
1.1.4 使用渲染組件
<template> <div> <v-form-render :form-json="formJson" :form-data="formData" :option-data="optionData" ref="vFormRef"> </v-form-render> <el-button type="primary" @click="submitForm">Submit</el-button> </div> </template> <script> export default { data() { return { formJson: {"widgetList":[],"formConfig":{"labelWidth":80,"labelPosition":"left","size":"","labelAlign":"label-left-align","cssCode":"","customClass":"","functions":"","layoutType":"PC","onFormCreated":"","onFormMounted":"","onFormDataChange":""}}, formData: {}, optionData: {} } }, methods: { submitForm() { this.$refs.vFormRef.getFormData().then(formData => { // Form Validation OK alert( JSON.stringify(formData) ) }).catch(error => { // Form Validation failed this.$message.error(error) }) } } } </script>
如果,你的需求不需要定制,那么基本如上所示,就基本夠用了。
如果需要有一些自己的修改,那么需要獨立安裝所有的依賴。
1.2.1 獨立安裝依賴
項目的依賴安裝完畢之后,我們對其進行一些改造,去到所在的組件,該刪除的刪除,該隱藏的隱藏。如下:
1.2.2 使用注意
所有ui組件基于element-ui,可以在左側組件庫內(nèi)雙擊圖標或者鼠標拖拽至中間畫布區(qū)域,完成布局和字段的填寫。
2.自定義組件,擴展組件?
自帶的組件已經(jīng)很全了。但是架不住變態(tài)需求。比如,要求我們增加一個圖片組件。這時候,只能自己根據(jù)其內(nèi)部機制進行擴展了。
2.1 找到項目中 extension 文件夾 新建組件
新建一個image的文件夾,里邊新增一個 image-widget.vue的組件。
注意,由于他的解析都是按照 xx-widget 這個形式去找組件的,所以必須以‘-widget’結尾命名。
2.2 定義這個圖片組件的字段
所有的字段在項目中都有對應,需要看對應關系的需要到 如下文件中去查看:
我們還是先打開extension中的 extension-schema.js ,在里邊最下方增加如下代碼(增加的是這個圖片組件的字段,用于屬性的編輯和組件的渲染),
// extension-schema.js ******* 新增圖片 字段 export const imageSchema = { type: 'image', icon: 'picture-upload-field', formItemFlag: true, options: { name: '', label: '', labelAlign: '', labelWidth: null, defaultValue: './sign.jpg', imageWidth: '100', imageHeight: '100', labelHidden: false, customClass: '', } }
2.3 注冊新增組件
新增了組件需要注冊這個組件,否則未來就不能渲染。
同樣在extension文件夾下找到extension-loader.js 文件,在最上方引用組件字段和組件,然后在下方注冊組件,并指定組件屬性的編輯器,
// extension-loader.js // 首先引入圖片組件和圖片組件的定義的字段 import {imageSchema} from "@/extension/samples/extension-schema" import ImageWidget from '@/extension/samples/image/image-widget' ...... // 然后在最后組件 ‘/* 字段組件加載完畢 end */' 之前 注冊我們寫好的圖片組件 /** 注冊自定義圖片組件 */ addCustomWidgetSchema(imageSchema) //加載組件 Json Schema Vue.component(ImageWidget.name, ImageWidget) //注冊組件 // 這段代碼的意思是 如果組件的字段中出現(xiàn) ‘imageWidth' 這個屬性的時候,那么需要 // 加載 image-editor 這個屬性編輯組件 // 這個組件怎么寫 我們下邊再說 PERegister.registerCPEditor('imageWidth', 'image-editor', PEFactory.createInputTextEditor('imageWidth', 'extension.setting.imageWidth'))
2.4 新增組件的中英文對照
因為這個項目用到了i18n國際化,所以需要添加中英文對照。
找打lang文件夾,找到如下文件
分別添加字段:
// us js export default { extension: { widgetLabel: { card: 'Card', alert: 'Alert', // 新增的字段 image: 'Image' }, setting: { cardFolded: 'Folded', cardShowFold: 'Show Fold', cardWidth: 'Width Of Card', cardShadow: 'Shadow', alertTitle: 'Title', alertType: 'Type', description: 'Description', closable: 'Closable', closeText: 'Text On Close Btn', center: 'Center', showIcon: 'Show Icon', effect: 'Effect', // 新增的字段 imageWidth: 'Width', imageHeight: 'Height' }, } } // cn js export default { extension: { widgetLabel: { card: '卡片', alert: '提示', // 新增 image: '圖片' }, setting: { cardFolded: '是否收起', cardShowFold: '顯示折疊按鈕', cardWidth: '卡片寬度', cardShadow: '顯示陰影', alertTitle: '標題', alertType: '類型', description: '輔助性文字', closable: '是否可關閉', closeText: '關閉按鈕文字', center: '文字居中', showIcon: '顯示圖標', effect: '顯示效果', // 新增 imageWidth: '寬度', imageHeight: '高度' }, } }
2.5 增加屬性編輯器
我們上邊也提高了圖片的imagewidth需要使用 image-editor編輯組件來進行編輯,那么我們需找到存放編輯組件的位置,如下圖路徑
如圖地方新增 image-editor.vue 組件,其內(nèi)部代碼如下:
<template> <div> <!-- 圖片寬度編輯 --> <el-form-item :label="i18nt('designer.setting.imageWidth')"> <el-input type="text" v-model="optionModel.imageWidth" ></el-input> </el-form-item> <!-- 圖片高度編輯 --> <el-form-item :label="i18nt('designer.setting.imageHeight')"> <el-input type="text" v-model="optionModel.imageHeight" ></el-input> </el-form-item> </div> </template> <script> import i18n from "@/utils/i18n" import propertyMixin from "@/components/form-designer/setting-panel/property-editor/propertyMixin" export default { name: "image-editor", mixins: [i18n, propertyMixin], props: { designer: Object, selectedWidget: Object, optionModel: Object, }, } </script> <style scoped> .html-content-editor { font-size: 14px; } </style>
寫完后,基本上一個自定義的圖片編輯器就寫好了。他最終會出現(xiàn)在下邊的自定義擴展字段:
2.6 編譯項目
如果你在vue項目內(nèi)直接預覽,問題不大。
但是注意,如果你是離線預覽。也就是說,你把所有的資源全部現(xiàn)在下來,放在一個html文件中預覽的時候,需要重新編譯。
運行
npm run lib-render
最終生成dist文件,取出lib-render中的VFormRender.umd.min.js,這個就是我們離線版本的js。
最終附上離線版本的結構:
至此,自定義組件就做好了。
要多看他原始組件如何加載解析的,才能寫出自定義組件。
總結
到此這篇關于vue可視化表單設計器自定義組件使用的文章就介紹到這了,更多相關vue可視化表單設計器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue3?element?plus按需引入最優(yōu)雅的用法實例
這篇文章主要給大家介紹了關于vue3?element?plus按需引入最優(yōu)雅的用法,以及關于Element-plus按需引入的一些坑,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-03-03Vue中使用定時器(setInterval、setTimeout)的兩種方式
js中定時器有兩種,一個是循環(huán)執(zhí)行?setInterval,另一個是定時執(zhí)行?setTimeout,這篇文章主要介紹了Vue中使用定時器?(setInterval、setTimeout)的兩種方式,需要的朋友可以參考下2023-03-03Vue.js實戰(zhàn)之利用vue-router實現(xiàn)跳轉頁面
對于單頁應用,官方提供了vue-router進行路由跳轉的處理,這篇文章主要給大家介紹了Vue.js實戰(zhàn)之利用vue-router實現(xiàn)跳轉頁面的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04vue+watermark-dom實現(xiàn)頁面水印效果(示例代碼)
watermark.js 是基于 DOM 對象實現(xiàn)的 BS 系統(tǒng)的水印,確保系統(tǒng)保密性,安全性,降低數(shù)據(jù)泄密風險,簡單輕量,支持多屬性配置,本文將通過 vue 結合 watermark-dom 庫,教大家實現(xiàn)簡單而有效的頁面水印效果,感興趣的朋友跟隨小編一起看看吧2024-07-07Vue向后端傳數(shù)據(jù)后端接收為null問題及解決
這篇文章主要介紹了Vue向后端傳數(shù)據(jù)后端接收為null問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09