vue可視化表單設(shè)計器自定義組件使用方法
前言
有一款基于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 獨立安裝依賴

項目的依賴安裝完畢之后,我們對其進(jìn)行一些改造,去到所在的組件,該刪除的刪除,該隱藏的隱藏。如下:

1.2.2 使用注意
所有ui組件基于element-ui,可以在左側(cè)組件庫內(nèi)雙擊圖標(biāo)或者鼠標(biāo)拖拽至中間畫布區(qū)域,完成布局和字段的填寫。
2.自定義組件,擴(kuò)展組件?
自帶的組件已經(jīng)很全了。但是架不住變態(tài)需求。比如,要求我們增加一個圖片組件。這時候,只能自己根據(jù)其內(nèi)部機(jī)制進(jìn)行擴(kuò)展了。
2.1 找到項目中 extension 文件夾 新建組件

新建一個image的文件夾,里邊新增一個 image-widget.vue的組件。
注意,由于他的解析都是按照 xx-widget 這個形式去找組件的,所以必須以‘-widget’結(jié)尾命名。
2.2 定義這個圖片組件的字段
所有的字段在項目中都有對應(yīng),需要看對應(yīng)關(guān)系的需要到 如下文件中去查看:

我們還是先打開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: '標(biāo)題',
alertType: '類型',
description: '輔助性文字',
closable: '是否可關(guān)閉',
closeText: '關(guān)閉按鈕文字',
center: '文字居中',
showIcon: '顯示圖標(biāo)',
effect: '顯示效果',
// 新增
imageWidth: '寬度',
imageHeight: '高度'
},
}
}
2.5 增加屬性編輯器
我們上邊也提高了圖片的imagewidth需要使用 image-editor編輯組件來進(jìn)行編輯,那么我們需找到存放編輯組件的位置,如下圖路徑

如圖地方新增 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)在下邊的自定義擴(kuò)展字段:

2.6 編譯項目
如果你在vue項目內(nèi)直接預(yù)覽,問題不大。
但是注意,如果你是離線預(yù)覽。也就是說,你把所有的資源全部現(xiàn)在下來,放在一個html文件中預(yù)覽的時候,需要重新編譯。
運行
npm run lib-render
最終生成dist文件,取出lib-render中的VFormRender.umd.min.js,這個就是我們離線版本的js。
最終附上離線版本的結(jié)構(gòu):

至此,自定義組件就做好了。
要多看他原始組件如何加載解析的,才能寫出自定義組件。
總結(jié)
到此這篇關(guān)于vue可視化表單設(shè)計器自定義組件使用的文章就介紹到這了,更多相關(guān)vue可視化表單設(shè)計器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-draggable實現(xiàn)拖拽表單的示例代碼
本文主要介紹了vue-draggable實現(xiàn)拖拽表單的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
詳解Vue開發(fā)網(wǎng)站seo優(yōu)化方法
這篇文章主要介紹了Vue開發(fā)網(wǎng)站seo優(yōu)化方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
解決vue-cli項目sourcemap因為文件重名導(dǎo)致的文件定位映射錯誤問題
這篇文章主要介紹了解決vue-cli項目sourcemap因為文件重名導(dǎo)致的文件定位映射錯誤問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
Vue使用axios(Ajax)+ElementUI實現(xiàn)登錄實踐
本文介紹了如何使用Vue和ElementUI框架創(chuàng)建一個登錄頁面,并實現(xiàn)前后端交互,同時,還討論了跨域問題的解決方案以及ES6中的箭頭函數(shù)2026-03-03

