关于 vue-treeselect 的基本用法攻略
vue-treeselect 是一个基于 Vue.js 和 Bootstrap 的无限级树选择器组件,可以用于树形选择和下拉菜单选择。本篇攻略将详细介绍 vue-treeselect 的基本用法,包括组件的基本属性、事件和插槽的使用方法,并提供两个示例说明。
安装
首先,我们需要安装 vue-treeselect。可以使用 npm 或 yarn 进行安装:
npm install vue-treeselect # 使用 npm 安装
yarn add vue-treeselect # 使用 yarn 安装
然后,在需要使用的地方引入组件:
<template>
<div>
<VueTreeselect />
</div>
</template>
<script>
import VueTreeselect from 'vue-treeselect';
export default {
components: {
VueTreeselect,
},
};
</script>
基本用法
基本属性
vue-treeselect 提供了多种属性来设置组件的基本行为。
options
options
属性是一个数组,表示选项列表。每个选项对象可以有 id
,label
,和 children
三个属性。例如:
[
{
id: '1',
label: '选项一',
children: [
{
id: '11',
label: '子选项一',
},
{
id: '12',
label: '子选项二',
},
],
},
{
id: '2',
label: '选项二',
},
]
value
value
属性表示当前选中的选项。它可以是一个字符串,一个字符串数组(为多选模式),或者 null
(表示没有选中任何选项)。例如:
<template>
<div>
<VueTreeselect
:options="options"
v-model="selected"
/>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
id: '1',
label: '选项一',
children: [
{
id: '11',
label: '子选项一',
},
{
id: '12',
label: '子选项二',
},
],
},
{
id: '2',
label: '选项二',
},
],
selected: '1',
};
},
};
</script>
multiple
multiple
属性表示是否允许多选。它可以是一个布尔值或者 null
(表示单选)。例如:
<template>
<div>
<VueTreeselect
:options="options"
v-model="selected"
:multiple="true"
/>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
id: '1',
label: '选项一',
children: [
{
id: '11',
label: '子选项一',
},
{
id: '12',
label: '子选项二',
},
],
},
{
id: '2',
label: '选项二',
},
],
selected: [],
};
},
};
</script>
事件
vue-treeselect 提供了多个事件来响应组件的交互操作。
input
input
事件在用户选中选项或清空选项时触发,它的参数为当前选中的选项或 null
。例如:
<template>
<div>
<VueTreeselect
:options="options"
v-model="selected"
@input="onInputChange"
/>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
id: '1',
label: '选项一',
children: [
{
id: '11',
label: '子选项一',
},
{
id: '12',
label: '子选项二',
},
],
},
{
id: '2',
label: '选项二',
},
],
selected: '1',
};
},
methods: {
onInputChange(selected) {
console.log(selected);
},
},
};
</script>
remove
remove
事件在用户移除选项时触发,它的参数为被移除的选项。例如:
<template>
<div>
<VueTreeselect
:options="options"
v-model="selected"
@remove="onRemove"
/>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
id: '1',
label: '选项一',
children: [
{
id: '11',
label: '子选项一',
},
{
id: '12',
label: '子选项二',
},
],
},
{
id: '2',
label: '选项二',
},
],
selected: '1',
};
},
methods: {
onRemove(removed) {
console.log(removed);
},
},
};
</script>
插槽
vue-treeselect 提供了多个插槽来自定义组件的显示效果。
value-label
value-label
插槽可以显示选项的 label。例如:
<template>
<div>
<VueTreeselect
:options="options"
v-model="selected"
>
<template #value-label="{ option }">
<span>选项 {{ option.label }}</span>
</template>
</VueTreeselect>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
id: '1',
label: '选项一',
children: [
{
id: '11',
label: '子选项一',
},
{
id: '12',
label: '子选项二',
},
],
},
{
id: '2',
label: '选项二',
},
],
selected: '1',
};
},
};
</script>
option
option
插槽可以自定义选项的显示效果。例如:
<template>
<div>
<VueTreeselect
:options="options"
v-model="selected"
>
<template #option="{ option }">
<span>选项 {{ option.label }}</span>
</template>
</VueTreeselect>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
id: '1',
label: '选项一',
children: [
{
id: '11',
label: '子选项一',
},
{
id: '12',
label: '子选项二',
},
],
},
{
id: '2',
label: '选项二',
},
],
selected: '1',
};
},
};
</script>
示例说明
示例一:展开所有选项
<template>
<div>
<VueTreeselect
:options="options"
v-model="selected"
:keep-inline-selected="true"
>
<template #option="{ option }">
<div style="display: flex; align-items: center;">
<span>{{ option.label }}</span>
<button
v-if="option.children && option.children.length"
type="button"
@click="option.forceExpand()"
>
展开
</button>
</div>
</template>
</VueTreeselect>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
id: '1',
label: '选项一',
children: [
{
id: '11',
label: '子选项一',
},
{
id: '12',
label: '子选项二',
children: [
{
id: '121',
label: '孙选项一',
},
{
id: '122',
label: '孙选项二',
},
],
},
],
},
{
id: '2',
label: '选项二',
},
],
selected: ['121'],
};
},
};
</script>
这个示例通过自定义选项插槽来添加一个“展开”按钮,使用户可以展开所有选项并选择子选项。默认情况下,vue-treeselect 会自动折叠未选中的选项,通过设置 keep-inline-selected
属性,可以保持父级选项与被选中的选项处于同一层级。
示例二:多选级联
<template>
<div>
<VueTreeselect
:options="options"
v-model="selected"
:multiple="true"
:emit-change-on-value-change="false"
>
<template #option="{ option, select }">
<div style="display: flex; align-items: center;">
<input
type="checkbox"
:checked="select.isSelected(option)"
@change="select.toggleOption(option)"
/>
<span>{{ option.label }}</span>
</div>
</template>
</VueTreeselect>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
id: '1',
label: '选项一',
children: [
{
id: '11',
label: '子选项一',
},
{
id: '12',
label: '子选项二',
children: [
{
id: '121',
label: '孙选项一',
},
{
id: '122',
label: '孙选项二',
},
],
},
],
},
{
id: '2',
label: '选项二',
},
],
selected: ['11'],
};
},
};
</script>
这个示例通过自定义选项插槽来使用复选框来实现多选。通过设置 emit-change-on-value-change
属性为 false
,可以实现多选级联的效果,即当用户选择子选项时,它对父级选项的选中状态也进行了同步。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于vue-treeselect的基本用法 - Python技术站