vue+element ui 完成 树形数据穿梭框

这篇具有很好参考价值的文章主要介绍了vue+element ui 完成 树形数据穿梭框。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

element ui中的穿梭框只能实现平铺数据的穿梭,这次的需求是要树形数据穿梭,所以写的是tree组件自己组合的穿梭框
element ui 里面的穿梭框el-transfer 能展示树状吗,vue,vue.js,ui,javascript文章来源地址https://www.toymoban.com/news/detail-550057.html

<div class="flex_square">
  <div class="tree-tranfer tree-tranfer-left">
    <el-input
      placeholder="输入关键字进行过滤"
      v-model="leftFilter">
    </el-input>
    <el-tree
      class="filter-tree"
      :props="defaultProps"
      :data="dataLeft"
      show-checkbox
      ref="treeLeft"
      node-key="id"
      :filter-node-method="filterNode"
      @check-change="leftChange">
    </el-tree>
  </div>
  <div class="transfer-btns">
    <el-button icon="el-icon-arrow-left" type="primary" :disabled="!delData.length" @click="deleteItems"></el-button>
    <el-button icon="el-icon-arrow-right" type="primary" :disabled="!addData.length" @click="addItems"></el-button>
  </div>
  <div class="tree-tranfer tree-tranfer-right">
    <el-input
      placeholder="输入关键字进行过滤"
      v-model="rightFilter">
    </el-input>
    <el-tree
      class="filter-tree"
      :props="defaultProps"
      :data="dataRight"
      show-checkbox
      ref="treeRight"
      node-key="id"
      :filter-node-method="filterNode"
      @check-change="rightChange">
    </el-tree>
  </div>
</div>

// 逻辑部分
deleteItems(){
  // 1.从右侧删除选中的数据,要用这个方法getCheckedNodes,元素标签必须配node-key
  let list = this.$refs.treeRight.getCheckedNodes()
  for(let item of list){
    let index = this.dataRight.findIndex(item2=> item.id == item2.id)
    if(index>=0){
      this.dataRight.splice(index,1)
    }
  }      
  // yuansiData 这个直接取初始化时的dataLeft值就行
  this.dataLeft = JSON.parse(JSON.stringify(this.yuansiData)) 
  for(let index in this.dataLeft){
    // 如果有子级去删除子级
    for(let item of this.dataRight){
      let ind = this.dataLeft[index].children.findIndex(item2=>{
        return item2.id == item.id
      })
      if(ind>=0){
        this.dataLeft[index].children.splice(ind,1)
      }
    }
  }
  this.dataLeft = this.dataLeft.filter(item2=>{
    return item2.children.length!=0
  })
},
addItems(){
  let list = this.$refs.treeLeft.getCheckedNodes()
  const parList = list.filter(item=>{
    return item.children
  })
  for(let item1 of parList){
    let index = this.dataLeft.findIndex(item2=>{
      return item2.id == item1.id
    })
    if(index>=0){
      this.dataLeft.splice(index,1)
    }
  }
  list = list.filter(item=>{
    return !item.children
  })
  // 这里做了三重循环,如果有可能需要对其进行优化
  for(let item of list){
    for(let ind in this.dataLeft){
      if(this.dataLeft[ind].children.length){
        let index = this.dataLeft[ind].children.findIndex(item2=>{
          return item2.id == item.id
        })
        if(index>=0){
          this.dataLeft[ind].children.splice(index,1)
        }
      }
    }
  }
  this.$refs.treeLeft.setCheckedNodes([])
  // 将选择的项添加到右侧
  this.dataRight.push(...list)
},

// 样式部分
.flex_square{
  display: flex;
  align-items: center;
  .tree-tranfer{
    width: 198px;
    height: 246px;
    border: 1px solid #EBEEF5;
    padding: 10px;
    overflow-y: auto;
  }
  .transfer-btns{
    padding: 0px 30px;
  }
}

到了这里,关于vue+element ui 完成 树形数据穿梭框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue+element ui表格穿梭框

    需求: 1.数据移动:左侧数据可移入右侧,右侧数据可移除回到左侧,且移回后顺序不改变 2.可进行模糊查询 (初始数据为请求后端接口获取,数据移动、模糊查询均为前端实现)

    2024年02月11日
    浏览(91)
  • 【vue2】element-ui el-transfer扩展 实现多列效果一对多

    vue2 el-transfer 穿梭框实现多类别 template 复制Transfer源码中的template,并拓展我们需要的列表2和button script 这里重写了Transfer的addToLeft方法,按着element-ui的逻辑写出第二个列表的逻辑即可。源码就不做解释了,这个组件比较简单,感兴趣的朋友可以去看看 style GitHub地址

    2024年02月08日
    浏览(44)
  • vue(element ui )el-table树形表格展示及数据对齐

    注意点: el-table配置里 row-key 必须是唯一性 :tree-props=“{ children: ‘relatedPartyChild’ , hasChildren: ‘hasChildren’ }” children配置为后端返回的节点字段即可

    2024年02月16日
    浏览(37)
  • vue + element-ui 穿梭框+上下移动、置顶置底功能

    预览效果:  代码 :

    2024年02月11日
    浏览(39)
  • Vue Element UI 中 el-table 树形数据 tree-props 多层级使用避坑

    实现效果: element官网提示设置tree-props为{children: ‘children’,hasChildren: ‘hasChildren’},data数据需要设置children和hasChildren属性,row-key也绑定了数据的唯一值变量id,但是 树形结构的第三级就是出不来 可以看到只有第二级,第三级并没有,于是查看了 数据格式 ,和官方要求的

    2024年02月02日
    浏览(70)
  • [VUE]Element_UI 实现TreeSelect 树形选择器

    最近在做一个人员管理系统,在增改用户信息时,可能会设置用户所在的部门,因为部门是多级的,于是想到用Element_UI的TreeSelect组件实现 效果: 安装完成后,打开package.json 可以看到@riophae/vue-treeselect的版本: 在需要使用TreeSelect的组件中引入 并将Treeselect加到components中:

    2024年02月09日
    浏览(28)
  • vue2+element-ui el-tree树形控件封装

    1.封装 根据官网配置项封装了下el-tree 方便维护和复用,有用的话点赞收藏叭~ 2.使用 如若要对不同的一级二级节点设置不同的样式可以参考这样:

    2024年02月12日
    浏览(40)
  • vue2 - 详细介绍element UI中在el-select嵌套el-tree树形控件实现下拉选择树型结构数据的效果实例(组件封装)

    在项目上常用使用到 el-select 和 el-tree 组合实现,记录下两者结合的实现过程。(代码以及注释清晰明了,代码直接使用即可) 要求根据项目接口提供的数据,el-tree 里的数据是一次性返回来的,点击最后一层级时,请求接口,在点击层级下方追加数据追加的数据要显示勾

    2024年04月15日
    浏览(43)
  • 在vue里面,element ui,el-select表单选中校验失败

    在element 表单中我们需要校验,当表单中有数据变动时,会触发检验。 提示:这里描述项目中遇到的问题: 在项目中,提交时下拉菜单没有选,会触发校验提示,去选中下拉菜单的数据,不会再次触发校验,导致校验提示文字依然存在 一般来说遇到了校验失效问题,有值的

    2024年02月12日
    浏览(35)
  • Element-UI控件Tree实现数据树形结构

            在前端开发中,有时会遇到所有菜单数据在同一级的情况,后端未对数据进行分级处理;但前端渲染需要是树状结构的数据,如何实现数据的树状化?将数组中通过父节点的ID与子节点的parentId关联,通过递归函数来实现。         前端框架这里使用element-ui的tree控件

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包