介绍:
Treeselect是一款基于Vue.js的树形选择器组件,可以快速地实现树形结构的选择功能。
这里梳理了我使用这个组件遇到的大部分问题
安装依赖:
首先,你需要在你的项目中安装Treeselect的依赖。这通常可以通过npm或yarn等来完成。
我是通过npm安装的
npm install @riophae/vue-treeselect --save
引入组件
需要引入Treeselect组件和它的样式文件,不引入样式文件的话你会发现奇妙的效果,哈哈
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
小可爱们,记得别忘记引入样式文件哦。
如果你忘了,依然是小可爱哈。
奇妙的效果:
正常效果:
声明组件:
通过Vue.component或在你的组件中直接使用components属性来完成。
components单词别写错了哦,少加s什么的
Vue.component('Treeselect', Treeselect)
// 或者在组件中
export default {
components: {
Treeselect
}
}
基本的使用:
<Treeselect
v-model="value"
:options="options"
placeholder="请选择"
clearable
searchable
/>
基本属性:
- multiple:设置是否支持多选。
- disabled:设置是否禁用组件。
- clearable:设置是否显示清空按钮。
- placeholder:设置输入框占位符文字。默认值为"请选择"。
- searchable:设置是否显示搜索框,以供过滤可选项列表中的选项。
下面是我经常用到的一些:(直接代码附上)
<el-form-item label="">
<!-- <el-select placeholder="业务模块" style="width: 150px;" filterable clearable v-model="queryParams.title">
<el-option v-for="(item, index) in modelList" :key="index" :label="item.label" :value="item.id">
</el-option>
</el-select> -->
<Treeselect
v-model="queryParams.title"
:multiple="false"
:appendToBody="true"
:options="modelList"
:normalizer="normalizer"
placeholder="业务模块"
noOptionsText="暂无数据"
noChildrenText="没有子选项"
noResultsText="没有匹配的结果"
:disable-branch-nodes="true"
style="width: 150px;"
/>
</el-form-item>
提醒:
对queryParams.title进行重置是不能让其变为‘’空字符,需要改成undefined
this.modelList=[]
this.queryParams.title=undefined
不然就出现了unknown,我这里是通过操作端进行联动的,当我x掉操作端,需要进行一个置空操作
变为undefined的正常效果,别写成了'undefined'
我通常用到的属性的介绍:(很实用哦,有效解决问题)
- :appendToBody="true"
- 将下拉列表(popover)附加到body元素上,而不是父元素。这有助于解决在某些CSS样式或z-index设置下下拉列表显示不全的问题。
- 就是下拉被其他的遮罩了,添加这个属性即可解决
- 解决前:解决后:
- :options="modelList"
- 绑定Vue实例中的
modelList
数组到组件的可选项数据源。- :normalizer="normalizer"
- 绑定一个函数
normalizer
,用于在内部处理选项数据,比如转换数据结构或添加额外属性。//拿到树状后进行处理,自己常用的: normalizer(node) { if (node.children && !node.children.length) { delete node.children; } return { id: node.id, label: node.label, children: node.children, }; },
下面4,6以前测试给我提过bug
- noOptionsText="暂无数据"
- 当没有可选项时显示的文本。
- 使用前后对比:
- noChildrenText="没有子选项"
- 当一个节点没有子节点时显示的文本。
- noResultsText="没有匹配的结果"
- 当搜索时没有匹配的结果时显示的文本。
- 使用前后对比:
- :disable-branch-nodes="true"
- 禁用分支节点(即只能选择叶子节点,不能选择非叶子节点)。
- 简单来讲就是只能选中最后一级
- 视频效果:
看到这里是不是受益良多,嘿嘿,希望大家多多补充哦。
其他比较用的少的举例:
- :closeOnSelect="true"
- 当选择一个选项后,自动关闭下拉列表。
- :closeOnClear="true"
- 当清除已选中的值时,自动关闭下拉列表。
- :openOnFocus="true"
- 当组件获得焦点时,自动打开下拉列表。
- :value-constrainer="function"
- 绑定一个函数,用于在选中或取消选中选项时,限制或修改值。
- :loading="boolean"
- 设置组件的加载状态。当为
true
时,组件会显示加载中的样式。- :loadOptions="function"
- 绑定一个函数,用于异步加载子选项。当用户尝试展开一个节点时,这个函数会被调用。
- @change="function"
- 当选中值发生变化时触发的事件处理函数。