一、 介绍
Vue treeselect 是一个易于使用,高效,具有可定制和实用功能的多选下拉菜单组件。它使用Vue.js组件系统,支持按需渲染选项和动态搜索,并能够呈现任意类型的数据。
Vue-Treeselect的设计旨在创造出一种友好的、可交互的多选下拉菜单,其中包括通过前端展示用户需要查询的内容,同时也支持后端通过Ajax等方式返回查询列表数据的多选下拉框组件。
通常,当我们需要展示包含多个数据层级的结构时,会用到嵌套的下拉菜单。而Vue-Treeselect能更好地实现这种需求。
二、 如何使用Vue treeselect
Vue-Treeselect是一个Vue组件,使用它前你需要保证Vue.js已经被加载了,由此需要在HTML页面中先引入Vue.js库。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>vue-treeselect</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<link rel="stylesheet" href="https://unpkg.com/vue-treeselect@0.4.0/dist/vue-treeselect.css">
<script src="//unpkg.com/vue-treeselect@0.4.0/dist/vue-treeselect.min.js"></script>
</head>
<body>
<div id="app">
<vue-treeselect ...></vue-treeselect>
</div>
<script>
new Vue({ el: '#app' })
</script>
</body>
</html>
上述代码中,我们需要引入vue.js和vue-treeselect.css,这样才能利用CSS样式表,否则我们将看到一个不可视的Vue-Treeselect。此外,在调用组件时,还需要使用Vue构造函数生成根Vue实例的示例,并且使用vue-treeselect组件进行渲染。
当我们使用Vue-Treeselect进行渲染时,还需要针对组件提供一些必要的选项,其中最显著的是:“options”, 它包含嵌套选项来渲染组件。下面是重要的选项清单,它包括组件支持的一些重要属性和方法:
{
/* 选项数据 */
options: [ ],
/* 选中的值 */
value: [ ],
/* 删除选项时的提示 */
deleteRemovalConfirmation: true,
/* 是否使用远程搜索 */
remote: false,
/* 可输入自定义 */
allowInput: false,
/* 自适应 */
autoPosition: false,
/* 选中时事件处理 */
onChange(selectedValues, selectedOptions) {
// ...
},
/* 远程搜索事件处理 */
loadOptionsAsync(searchInput, loadedOptions) {
// ...
}
}
三、Vue-Treeselect的选项属性
Vue treeselect组件中可以使用的options数据是一个树形数组。每一个节点都包括以下属性:
- id: 传递到onChange事件回调中,等价于valueKey。
- label: 显示在tree select中的文本。
- children: 包含选项或子节点的数组。
- hasChildren: 对于使用异步加载数据的情况,可以使用此属性进行加载更多节点。
- parentId: 渲染树时的父节点的id属性。
- ...: 你可以在数据中添加自定义属性,在组件回调时使用。
四、Vue-Treeselect的事件
Vue-Treeselect提供了onChange和loadOptionsAsync两个事件,以响应组件的行为。
当选项发生改变时,onChange会被触发,并且会传递已选值(以数组的形式)和已选选项(已选值的引用)作为其两个参数。
{
onChange(selectedValues, selectedOptions) {
console.log('Selected Options:', selectedOptions);
}
}
对于异步加载选项的使用情况,可以使用loadOptionsAsync处理搜索事件。这个函数接受两个参数:搜索输入值和一个回调函数,这个回调函数负责更新你的options。
{
loadOptionsAsync(searchInput, loadedOptions) {
console.log('loadOptionsAsync:', searchInput, loadedOptions);
}
}
五、Vue-Treeselect的高级用法
5.1 使用ref属性进行树选择的打开/关闭
在某些情况下,可能需要从父元素(例如一个按钮或一个链接)打开和关闭树选择。这时候,我们可以使用ref引入Vue-Treeselect的组件实例(下文实例变量名为 treeSelect),并使用组件内置的打开和关闭方法:openMenu()和closeMenu():
<vue-treeselect ref="treeSelect"></vue-treeselect>
this.$refs.treeSelect.openMenu();
this.$refs.treeSelect.closeMenu();
5.2 搜索防抖
默认情况下,Vue-Treeselect响应搜索。每当搜索状态发生变化时,用户输入将更新值。Vue-Treeselect使用一个搜索防抖技术(默认时间(750ms)),以防止过度响应搜索。
在某些情况下,该延迟可能无法满足特定的需求。果需要更改防抖时间,请使用“debounceSearch”选项更改它:
<vue-treeselect :searchable="true" :debounce-search="500"></vue-treeselect>
通过上述代码,我们可以将默认防抖时间,从750ms更改为500ms,这样会更灵敏的响应用户的搜索输入事件。
5.3 启用嵌套菜单的多选
默认情况下,Vue-Treeselect不支持对嵌套菜单进行多选。此时需要使用属性“flattenSearchResults”进行递归菜单的多选设置。
<vue-treeselect :flatten-search-results="true"></vue-treeselect>
当将递归结果扁平化时,“flatten-search-results”属性将默认启用多选效果,以便嵌套菜单中的所有菜单被选中。
5.4 查询其他非标准选项的配置
在实际应用中,有可能需要在数据中包含某些自定义选项属性,这些选项属性不在Vue Treeselect内置的一组标准属性中。在这种情况下,可借助Vue Treeselect的“capable”计算属性和“on-”前缀组合使用来让Vue Treeselect处理您自定义的属性。
在Vue Treeselect中,属性成员变量名称必须以on-为前缀,如果它不是一个内置属性名,则成员变量被视为自定义选项,并会传递给组件的事件处理程序。下面是一个示例的自定义选项名称“on-random-int”:
{
capable: ({ onRandomInt }) => onRandomInt != null,
onRandomInt(selectedValues, selectedOptions) {
const randomNode = selectedOptions.find(o => o.onRandomInt != null);
console.log('Random int =', randomNode.onRandomInt);
},
}
结语
Vue-Treeselect是一个易于使用、高度定制、易于实用的多选下拉菜单组件。通过Vue Treeselect,我们可以更好地展示多级数据结构,支持搜索、异步加载和自定义事件响应。通过本文的阐述,读者可以快速上手使用Vue Treeselect,并掌握其基本选项、事件处理和高级设置。