element-plus select 自定义
时间: 2023-09-29 22:10:10 浏览: 206
Element-Plus 的 Select 组件支持自定义选项模板和选项分组,以下是一个简单的自定义 Select 组件示例:
```html
<template>
<el-select v-model="value" :placeholder="placeholder" :multiple="multiple" :collapse-tags="collapseTags" :filterable="filterable" :allow-create="allowCreate" :default-first-option="defaultFirstOption" :popper-class="popperClass" :remote="remote" :loading="loading" :loading-text="loadingText" :no-match-text="noMatchText" :no-data-text="noDataText" :popper-append-to-body="popperAppendToBody" :automatic-dropdown="automaticDropdown" :reserve-keyword="reserveKeyword" @change="handleChange">
<template #default="{option}">
<span v-if="option.value !== 'divider'" class="el-select-dropdown__item">{{ option.label }}</span>
<el-divider v-else />
</template>
<template #group="{group}">
<span class="el-select-dropdown__item el-select-group">{{ group.label }}</span>
</template>
</el-select>
</template>
<script>
export default {
name: 'CustomSelect',
props: {
placeholder: {
type: String,
default: '请选择'
},
value: {
type: [String, Number, Array],
default: ''
},
multiple: {
type: Boolean,
default: false
},
collapseTags: {
type: Boolean,
default: false
},
filterable: {
type: Boolean,
default: false
},
allowCreate: {
type: Boolean,
default: false
},
defaultFirstOption: {
type: Boolean,
default: false
},
popperClass: {
type: String,
default: ''
},
remote: {
type: Boolean,
default: false
},
loading: {
type: Boolean,
default: false
},
loadingText: {
type: String,
default: '加载中'
},
noMatchText: {
type: String,
default: '无匹配数据'
},
noDataText: {
type: String,
default: '暂无数据'
},
popperAppendToBody: {
type: Boolean,
default: true
},
automaticDropdown: {
type: Boolean,
default: false
},
reserveKeyword: {
type: Boolean,
default: false
},
options: {
type: Array,
default: () => []
}
},
methods: {
handleChange(value) {
this.$emit('change', value)
}
}
}
</script>
```
在模板中,我们定义了两个插槽:`default` 和 `group`。`default` 插槽用于渲染每个选项,`group` 插槽用于渲染选项分组。在插槽中,我们可以访问到 `option` 和 `group` 对象,它们包含了选项和分组的相关信息。
同时,我们还定义了一些 props,用来控制 Select 的行为和样式。
使用自定义 Select 组件时,只需要传入 `options` 属性,指定选项列表,即可完成自定义。例如:
```html
<template>
<custom-select :options="options" v-model="selected" />
</template>
<script>
import CustomSelect from './CustomSelect.vue'
export default {
components: {
CustomSelect
},
data() {
return {
selected: '',
options: [
{
label: '选项一',
value: '1'
},
{
label: '选项二',
value: '2'
},
{
label: '选项三',
value: '3'
},
{
label: '分组一',
value: 'divider'
},
{
label: '选项四',
value: '4',
group: '分组一'
},
{
label: '选项五',
value: '5',
group: '分组一'
}
]
}
}
}
</script>
```
注意,在定义选项时,我们可以通过 `group` 属性指定选项所属的分组,从而实现选项分组的效果。
阅读全文