-
Notifications
You must be signed in to change notification settings - Fork 377
如何在左侧使用自定义组件
SSC edited this page Nov 10, 2020
·
7 revisions
进入此文档说明你已经了解了设计器的基本属性,已经可以成功开始使用了。
如何自定义左侧字段显示介绍了左侧字段的显隐控制。但这些字段只是通用的,有的同学需要自定义业务字段,并且还要配置组件的属性或事件。请看customFields
属性的用法。
customFields | 自定义字段 | Array
默认值 []
以 el-alert 为例,看一个基本用法。
<template>
<avue-form-design style="height: 100vh;"
:undo-redo="false"
:show-github-star="false"
:include-fields="[]"
:custom-fields="customFields">
</avue-form-design>
</template>
<script>
export default { // 方便演示,隐藏了其他字段
data() {
return {
customFields: [{
title: '警告',
component: 'el-alert',
labelWidth: '0px',
span: 24,
icon: 'el-icon-warning',
params: {
title: '警告警告警告警告',
type: 'success'
},
event: {
close: () => {
console.log('alert关闭事件')
}
}
},]
}
},
}
</script>
自定义字段的核心在于字段中的component
,params
,event
属性。component
属性用来控制渲染什么组件,配置了此属性后可在设计器右侧采用js的方式配置自定义属性和自定义事件。params
用来控制自定义组件的自定义属性。event
用来控制组件的自定义事件。
对于设计器来说首先来大体定义两种组件:
-
可配置的组件
例如el-alert
,可直接通过属性的配置来控制组件内的显示内容。
对于这种组件可直接通过component
属性来渲染组件,并通过右侧配置控制组件的显示内容。 -
不可配置的组件
例如el-timeline
,需要通过内容插槽来控制组件内的显示内容。
对于这种组件,我们需要二次封装。将其变成可配置的组件
。下面来看个例子:
- 编写一个组件
custom-timeline
custom-timeline.vue
<template>
<el-timeline :reverse="reverse">
<el-timeline-item v-for="(item, index) in itemList"
:key="index"
:icon="item.icon"
:type="item.type"
:color="item.color"
:size="item.size"
:timestamp="item.timestamp">
{{item.content}}
</el-timeline-item>
</el-timeline>
</template>
<script>
export default {
name: 'custom-timeline',
props: {
itemList: {
type: Array,
default: () => {
return []
}
},
reverse: {
type: Boolean,
default: false
}
}
}
</script>
<style>
</style>
- 在
main.js
中注册
import CustomTimeline from './components/custom/timeline'
Vue.component(CustomTimeline.name, CustomTimeline)
// import CustomFields from './components/custom' //自定义组件多时可使用此方式批量注册组件
// Vue.use(CustomFields)
- 页面中使用
<template>
<avue-form-design style="height: 100vh;"
:undo-redo="false"
:show-github-star="false"
:include-fields="[]"
:custom-fields="customFields">
</avue-form-design>
</template>
<script>
export default { // 方便演示,隐藏了其他字段
data() {
return {
customFields: [{
title: '警告',
component: 'el-alert',
labelWidth: '0px',
span: 24,
icon: 'el-icon-warning',
params: {
title: '警告警告警告警告',
type: 'success'
},
event: {
close: () => {
console.log('alert关闭事件')
}
}
}, {
title: '时间线',
component: 'custom-timeline',
labelWidth: '0px',
span: 24,
icon: 'el-icon-sort',
params: {
reverse: false,
itemList: [{
content: '支持使用图标',
timestamp: '2018-04-12 20:46',
size: 'large',
type: 'primary',
icon: 'el-icon-more'
}, {
content: '支持自定义颜色',
timestamp: '2018-04-03 20:46',
color: '#0bbd87'
}, {
content: '支持自定义尺寸',
timestamp: '2018-04-03 20:46',
size: 'large'
}, {
content: '默认样式的节点',
timestamp: '2018-04-03 20:46'
}]
}
}]
}
},
}
</script>
- 效果如下
自定义组件的核心在于component
属性,理论上设计器可渲染任何注册过的组件
,并通过右侧params
自定义属性来配置组件的显示内容。