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 獨立安裝依賴

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

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

新建一個image的文件夾,里邊新增一個 image-widget.vue的組件。
注意,由于他的解析都是按照 xx-widget 這個形式去找組件的,所以必須以‘-widget’結(jié)尾命名。
2.2 定義這個圖片組件的字段
所有的字段在項目中都有對應,需要看對應關(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: '標題',
alertType: '類型',
description: '輔助性文字',
closable: '是否可關(guān)閉',
closeText: '關(guān)閉按鈕文字',
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。
最終附上離線版本的結(jié)構(gòu):

至此,自定義組件就做好了。
要多看他原始組件如何加載解析的,才能寫出自定義組件。
總結(jié)
到此這篇關(guān)于vue可視化表單設(shè)計器自定義組件使用的文章就介紹到這了,更多相關(guān)vue可視化表單設(shè)計器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3?element?plus按需引入最優(yōu)雅的用法實例
這篇文章主要給大家介紹了關(guān)于vue3?element?plus按需引入最優(yōu)雅的用法,以及關(guān)于Element-plus按需引入的一些坑,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-03-03
Vue中使用定時器(setInterval、setTimeout)的兩種方式
js中定時器有兩種,一個是循環(huán)執(zhí)行?setInterval,另一個是定時執(zhí)行?setTimeout,這篇文章主要介紹了Vue中使用定時器?(setInterval、setTimeout)的兩種方式,需要的朋友可以參考下2023-03-03
Vue.js實戰(zhàn)之利用vue-router實現(xiàn)跳轉(zhuǎn)頁面
對于單頁應用,官方提供了vue-router進行路由跳轉(zhuǎn)的處理,這篇文章主要給大家介紹了Vue.js實戰(zhàn)之利用vue-router實現(xiàn)跳轉(zhuǎn)頁面的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04
vue+watermark-dom實現(xiàn)頁面水印效果(示例代碼)
watermark.js 是基于 DOM 對象實現(xiàn)的 BS 系統(tǒng)的水印,確保系統(tǒng)保密性,安全性,降低數(shù)據(jù)泄密風險,簡單輕量,支持多屬性配置,本文將通過 vue 結(jié)合 watermark-dom 庫,教大家實現(xiàn)簡單而有效的頁面水印效果,感興趣的朋友跟隨小編一起看看吧2024-07-07
vue 路由meta 設(shè)置導航隱藏與顯示功能的示例代碼
這篇文章主要介紹了vue 路由meta 設(shè)置導航隱藏與顯示功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
Vue向后端傳數(shù)據(jù)后端接收為null問題及解決
這篇文章主要介紹了Vue向后端傳數(shù)據(jù)后端接收為null問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

