Vue- Treeselect组件使用(下拉框树形结构)

前言

  • 最近在开发时遇到一个问题,是在输入框里面放一个树形组件。查看饿了吗之后发现都不太行

  • 最后在网上搜了一下,真的是有相关的组件Treeselect,确实有相关文章说明,但是比较乱。

  • 在数据配置项,多选,只能选子级都是有现成封装好的属性的,可以直接使用。

  • 在这里记录一下,Treeselect全局使用

代码实现

1.下包

npm install treeselect -S

2.注册为全局组件很多地方要用-第一次记得在main.js中引入(主页文章有)

// 输入框树形组件
import Treeselect from '@riophae/vue-treeselect'
export default {
  // install全局引入 vue中一个方法
  // 第1个参数是标签名称,第2个参数是一个选项对象
  install (Vue) {
    // 注册组件
    Vue.component('Treeselect', Treeselect)
  }
}
 

3.main.js引入样式

// 下拉框全局组件样式
import '@riophae/vue-treeselect/dist/vue-treeselect.css'

4.页面结构-deptID绑定的值-及相关使用

//  :show-count="true" 显示树性结构每一集有多少条数据
//  multiple  多选属性,多选时v-model是一个数组
//  :disable-branch-nodes="true"  只能选子级,父级不能选择
//  当我们树形结构层级超过3级时,v-model绑定值,可能只会停留在3级,可以加上面属性就解决了
//  valueFormat="object" v-model-变成树型结构(父级和子级数据都在)
//  :show-count="true" 显示子级数量
//  @select="selectedTree" 选中当前层级数据

<treeselect
          style="width: 220px;"
          v-model="deptID"
          :show-count="true"
          :options="deptOptions"
          @select="selectedTree"
          :show-count="true"
          :normalizer="normalizer"
          placeholder="选择维保班组"
   />

5.data数据

data() {
    return {
      // 绑定值
      deptID:null,
      // 树结构选择数据
      deptOptions: []
    }
}
6.methods方法-相当于tree树结构配置
methods:{
  // 树结构格式配置-跟element Tree树结构配置项一样-子级为空数组去除
      normalizer(node) {
      if (node.children && !node.children.length) {
        delete node.children;
      }
      // 可以配置isDisabled:true-false 来控制禁用
      return {
        id: node.deptId,
        label: node.deptName,
        children: node.children,
      };
    },
}

实际开发问题-后端需要你把选中数据父级子级全部以数组对象形式传回来

  • 遇到这个需求的话,首先我们应该思考怎么知道用户选择的子父数据,
  • 子级组转肯定是不现实,经过查阅,该组件有一个数据可以把绑定数据是一个数组对象形式,每一个对象都是我们选中的数据对应树型结构
  • 解决数据选中问题,我们只要使用数据扁平化方法,把最终处理过的数据-数据对象传给后端即可-(数组扁平化方法主页文章有)
valueFormat="object"

结果:此时按照要求数据给你后端,回显时直接把这个数组对象直接返给你,你没有操作直接赋值,此时你发现显示正常

bug:当你删除一个父级节点,它的子级节点出来的需要再次删除,依此类推,如果子节点很多那需要删除很多次,用户体验不好

原因:因为你在回显时候,直接把后端的数组对象直接赋值了,但是用vue页面插件查看v-model版定值确实是树型结构,此时不要给迷惑了。这个数据是组件通过你给它的数组对象自己从组件options里面取过来的,没有关联关系,所以导致这个问题。(验证的话,你可以在data里面把v-model值写死,或者查看后端返回来数据,一对比就会发现,你给他数据和vue页面数据不一样-vue页面数据显示非常全面-因为是从options通过id取得)

解决:在回显时候把数据变成树型结构即可-后端直接把数据变成树型结构,或者在数组对象里面放父级id,前端自己把数据组装成树型结构赋值即可,这个bug就会消失,删除一次即可(前端数组对象转树型结构主页文章有)


总结:

经过这一趟流程下来相信你也对 Vue- Treeselect组件使用(下拉框树形结构) 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

什么不足的地方请大家指出谢谢 -- 風过无痕

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
vue-treeselect 是一个基于 Vue.js 的树形选择组件,支持模糊搜索功能。通过在组件的相关属性中设置参数,可以实现模糊搜索的效果。 在使用 vue-treeselect 进行模糊搜索时,可以通过设置 `:normalizer` 属性来自定义搜索过程。例如,可以使用正则表达式或自定义函数来过滤选项列表。 此外,还可以设置 `:search-prompt-text` 属性来显示搜索提示文本,让用户知道可以进行模糊搜索。 具体使用方法可以参考中的示例代码,其中包含了如何引入 vue-treeselect 组件以及如何设置相关属性来实现模糊搜索功能。 另外,如果需要使用 vue-treeselect 组件,建议通过 npm 安装 `vue-treeselect` 包,并使用类的捆绑器来构建您的应用程序,可以通过运行 `npm install --save @riophae/vue-treeselect` 命令进行安装。 通过以上方法,您可以在使用 ant design vue 的下以及树形组件时,实现模糊搜索的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Ant Design Vue框架 select下以及TreeSelect树形选择模糊搜索](https://blog.csdn.net/weixin_45815557/article/details/130487687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [VueTreeselect树控件搜索+下框功能](https://blog.csdn.net/qq_40190624/article/details/121928894)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue-treeselect:具有对Vue.js的嵌套选项支持的多选组件](https://download.csdn.net/download/weixin_42139042/15095956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-風过无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值