Vue使用treeTransfer树形穿梭

 开发中,经常有穿梭框的需求,但常见的灵活性较低,不支持左右树形,因此在项目开发过程中,摸索了treeTransfer库,是基于element组件库的。

如下图所示

树形穿梭框

 treeTransfer安装

  1.  安装elementUi后,npm i el-tree-transfer
  2. 在页面使用引入,import treeTransfer from 'el-tree-transfer'

  3. 在conponents注册组件,components: {treeTransfer}

  4. 完成以上,便可在template中使用<treeTransfer></treeTransfer>

treeTransfer使用

H5部分,均在data中定义
title: ['所有指标', '已选指标'] 为左右头部描述
:from_data='fromData'fromData为左侧数据(数组)
:to_data='toData' toData为右侧数据(数组)
height='540px' 可为穿梭框设置高度
filter开启过滤筛选(搜索)
openAll展开所有节点

      <treeTransfer
        :title="title"
        :from_data='fromData'
        :to_data='toData'
        :defaultProps="{label:'label'}"
        @add-btn='add'
        @remove-btn='remove'
        :mode='mode'
        height='540px'
        filter
        openAll
        >
      </treeTransfer>

实现左右树形

思路:进入树形穿梭框页面,获取所有的数据(左侧右侧数据在一个大数组),每一项有一个标识selected(selected为后端定义)为true时在右侧,所以在进入页面后,写两个方法,分别把数据放到左侧fromData和右侧toDat。实现在下方

数据结构

dataList为所有数据,最外层的父级pid必须是0(文档规定,且父级pid:0必须是Number类型),每一级的子级pid需要一致(自行看数据悟,数据都是很简单的),selected为当前项需要在右侧

      dataList: [
        {
          id: '1',
          pid: 0,
          label: '界面指标',
          children: [
            {
              id: '1-1',
              pid: '1',
              label: '隐藏存款',
              selected: true
              // disabled: true,
            },
            {
              id: '1-2',
              pid: '1',
              label: '结算备用金'
            }
          ]
        },
        {
          id: '2',
          pid: 0,
          label: '隐藏指标',
          children: [
            {
              id: '2-1',
              pid: '2',
              label: '赎回分红提前冻结T1'
            // disabled: true,
            },
            {
              id: '2-2',
              pid: '2',
              label: '申购分红款T0交收',
              selected: true
            }
          ]
        }
      ],

实现左侧fromData展示

我这里是写了一个方法

参数一:treeList是总数据(上面的dataList),

参数二:leftFromDta是一个空数组(直接传空数组就好)

递归循环,父级到子级,将selected为false的一项,生成新数组并赋值给fromData

    /**
     * 格式化左侧数据
     * @param {array} treeList
     * @param {array} leftFromData
     */
    getTreeList (treeList, leftFromData) {
      treeList.map((item) => {
        if (!item.selected) {
          const tempData = {
            label: item.label,
            id: item.id,
            pid: item.pid
          }

          // 如果有子项
          if (item.children && item.children.length > 0) {
            tempData.children = []
            this.getTreeList(item.children, tempData.children)
          }
          leftFromData.push(tempData)
        }
      })
      this.fromData = leftFromData
    },

实现右侧toData展示

参数与左侧一致

思路是在数据中找到selected为true的一项,并生成一个对象(对象需要父级包子级的格式),所以需要两层循环,children(数组)为当前找到selected为true的一项,并push在数组中

注意最后生成的数组,需要去重一下,我这里用的是lodash提供的方法

可自行去重,去重后赋值给toData即可

    /**
     * 格式化右侧todata
     * @param {array} treeList
     * @param {array} rightToData
     */
    getToDataList (treeList, rightToData) {
      let childrenArr = []
      // 一级
      treeList.forEach((element) => {
        // 二级
        element.children.forEach(item => {
          if (element.id === item.pid && item.selected) {
            childrenArr.push(item)
            const tmp = {
              label: element.label,
              id: element.id,
              pid: element.pid,
              children: childrenArr
            }
            rightToData.push(tmp)
          }
        })
        childrenArr = []
      })
      // 引用类型数组去重
      this.toData = _.uniqWith(rightToData, _.isEqual)
    },

到此,进入页面默认展示左侧、右侧已完成。

左右穿梭后,可打印fromData、toData来查看当前左右侧数据

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Vue可以使用ElementUI的树形组件来展示树形结构的数据。使用步骤如下: 1. 安装ElementUI组件库 可以通过npm或yarn安装ElementUI组件库,具体命令如下: ``` npm install element-ui --save ``` 或 ``` yarn add element-ui ``` 2. 引入ElementUI组件 在Vue项目的入口文件中,引入ElementUI组件库和样式文件,具体代码如下: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 3. 使用树形组件 在Vue组件中,使用ElementUI的el-tree组件来展示树形结构的数据,具体代码如下: ```html <template> <el-tree :data="treeData" :props="treeProps"></el-tree> </template> <script> export default { data() { return { treeData: [ { label: '一级 1', children: [ { label: '二级 1-1', children: [ { label: '三级 1-1-1' }, { label: '三级 1-1-2' } ] }, { label: '二级 1-2', children: [ { label: '三级 1-2-1' }, { label: '三级 1-2-2' } ] } ] }, { label: '一级 2', children: [ { label: '二级 2-1', children: [ { label: '三级 2-1-1' }, { label: '三级 2-1-2' } ] }, { label: '二级 2-2', children: [ { label: '三级 2-2-1' }, { label: '三级 2-2-2' } ] } ] } ], treeProps: { label: 'label', children: 'children' } } } } </script> ``` 其中,treeData是树形数据,treeProps是树形组件的配置项,用于指定树形数据中的label和children字段。 以上就是使用ElementUI树形组件的基本步骤。 ### 回答2: Vue是一种流行的JavaScript框架,用于构建用户界面。ElementUI是一个基于Vue的UI组件库,其中包含许多常见的UI组件,包括树形组件。ElementUI的树形组件使开发人员能够轻松创建树形结构的界面元素,并可以满足各种需求。 要使用ElementUI的树形组件,首先需要在Vue应用程序中安装ElementUI。有多种方法可以安装ElementUI,其中包括使用npm、CDN或下载源代码。在安装完成后,开发人员可以在需要使用树形组件的地方包含ElementUI中的<el-tree>标记。 使用ElementUI的树形组件非常灵活。开发人员可以通过简单的属性更改来自定义树形组件的行为和外观。例如,可以使用“expand-on-click-node”属性来控制树形节点是否可以通过单击展开/关闭。开发人员还可以使用“:data”属性来传递树形节点的数据。此外,ElementUI还提供了许多事件和插槽,以便更好地控制树形组件的行为。 在许多应用程序中,树形结构是重要的用户界面元素。使用ElementUI的树形组件可以使开发人员更轻松地创建和管理树形结构,并可以提高应用程序的可维护性和性能。无论是开发单页面应用程序还是多页面应用程序,使用ElementUI的树形组件都是一个不错的选择。 ### 回答3: Vue 使用 ElementUI 树形组件非常方便。ElementUI 是一个基于 Vue.js 的组件库,提供了丰富的 UI 组件,其中包括了树形组件。以下是关于 Vue 使用 ElementUI 树形组件的一些注意事项和步骤: 安装 ElementUI: 在使用 ElementUI 之前,需要先安装它。在命令行中执行以下命令即可: ``` npm install element-ui --save ``` 使用 ElementUI 树形组件: 在 Vue 项目中使用 ElementUI 树形组件,需要先引入 ElementUI 和相应的组件。在 main.js 中添加如下内容: ``` import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 接下来就可以在需要使用树形组件的地方添加以下代码: ``` <template> <el-tree :data="data" :props="defaultProps"> </el-tree> </template> <script> export default { data() { return { data: [{ label: '一级 1', children: [{ label: '二级 1-1', children: [{ label: '三级 1-1-1' }] }] }, { label: '一级 2', children: [{ label: '二级 2-1', children: [{ label: '三级 2-1-1' }] }, { label: '二级 2-2', children: [{ label: '三级 2-2-1' }] }] }, { label: '一级 3', children: [{ label: '二级 3-1', children: [{ label: '三级 3-1-1' }] }, { label: '二级 3-2', children: [{ label: '三级 3-2-1' }] }] }], defaultProps: { children: 'children', label: 'label' } } } } </script> ``` 在这个例子中,我们使用了一个简单的树形结构。需要注意的是,在 data 中定义了树的结构,而在 defaultProps 中,则定义了树的属性。 以上就是 Vue 使用 ElementUI 树形组件的简单介绍。使用 ElementUI 提供的树形组件,可以更加轻松地实现树形结构的展示,并且具有良好的用户交互体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值