上一篇我們講到了怎麼在OpenDataV中新增自己的元件,為了讓大家更快的上手我們的平臺,這一次針對自定義屬性編輯,我們再來加一篇說明。我們先來看一下OpenDataV中的屬性編輯功能。
當我們拖動一個元件到畫布中以後,點選元件,在頁面的右側就出現了對應的屬性編輯。在上一篇新增元件的文章中我們有一個組態檔config.ts
,設定了元件的樣式和屬性修改,其中對於每一項設定我們設定了型別FormType
,就像如下:
目前我們的FormType
只支援幾種固定的方式,這裡所設定的型別就會反應到屬性編輯框中,例如FormType.COLOR
,就會是一個顏色選擇框,FormType.SWITCH
就是一個開關按鈕,那如果需要用到的編輯方式在FormType
裡面不支援怎麼辦呢?我們提供了FormType.CUSTOM
自定義屬性編輯型別,這樣就可以針對我們自己的元件來客製化屬性編輯框。下面我帶大家一步步完成一個自定義的屬性編輯框。我們以ScrollTable
元件為例
在Table/ScrollTable
目錄下增加vue
檔案xxx.vue
,名稱可以隨意定義,內容如下:
<template>
<n-form :model="formData" size="small" label-placement="left">
<n-form-item label="行高度">
<n-input-number v-model:value="formData.height" @keypress.enter.prevent="changeData" />
</n-form-item>
<n-form-item label="背景色">
<div class="backcolor">
<n-color-picker v-model:value="formData.oddRowBGC" @complete="changeData" />
<span class="title">奇數行</span>
</div>
<div class="backcolor">
<n-color-picker v-model:value="formData.evenRowBGC" @complete="changeData" />
<span class="title">偶數行</span>
</div>
</n-form-item>
</n-form>
</template>
<script lang="ts" setup>
......
</script>
對於自定義屬性編輯元件的書寫要求有以下幾個:
value
(必須)和args
(可選)屬性updateValue
方法<script lang="ts" setup>
import { reactive } from 'vue'
import { NForm, NFormItem, NInputNumber, NColorPicker } from 'naive-ui'
import { RowType } from './type'
const props = defineProps<{
value: RowType
args: any
}>()
const emits = defineEmits<{
(e: 'change', value: RowType)
}>()
const formData = reactive<RowType>({
height: props.value.height || 30,
oddRowBGC: props.value.oddRowBGC || '#003B51',
evenRowBGC: props.value.evenRowBGC || '#0A2732'
})
const changeData = () => {
emits('change', formData)
}
</script>
value
屬性接收的是自定義編輯框的值,和普通的屬性一樣,但是這裡可以接收任意的資料,陣列、物件或者基礎型別資料,我們在渲染右側屬性編輯框的時候,會把屬性框中的數值通過此屬性傳遞給當前元件。
args
是我們提供給元件的額外設定資料,可以根據需求來使用。
updateValue
這個方法將會把自定義屬性編輯框中的值通過我們的資料流傳遞到當前編輯的元件中。
在ScrollTable
目錄下的config.ts
中增加如下設定:
首先我們設定type
為FormType.CUSTOM
,showLabel
的作用是是否顯示錶單中的label,這裡主要是為了讓我們的自定義編輯框擁有更大的渲染位置,在componentOptions
中的componentType
屬性設定上元件物件,然後defaultValue
就是ScrollTableForm
元件中updateValue
返回的值以及value
所接收的值。
做完以上工作,我們就可以在右側編輯框檢視自定義屬性編輯框的效果了。
因為樣式和屬性有所區別,因此增加自定義樣式編輯需要有一些特殊處理,我們在下一篇在講,在框架的設計之初我們就考慮到元件、屬性編輯、工具列等採用動態註冊的方式來增加,一方面為了讓框架更加簡潔,另一方面也降低了元件自定義的難度。
Vue3拖拽式視覺化低程式碼資料視覺化平臺
OpenDataV低程式碼平臺新增元件流程