elementUi的树tree组件的使用

element-ui的tree的使用

数据源的构造通用方法

树结构数据通用结构样例:

[
 {
      id: 1,
        label: '一级 1',
        children: [{
          id: 4,
          label: '二级 1-1',
          children: [{
            id: 9,
            label: '三级 1-1-1'
          }, {
            id: 10,
            label: '三级 1-1-2'
          }]
        }]
      },
     {
         id: 2,
         label: '一级 2',
         children: [{
           id: 5,
           label: '二级 2-1'
         }, {
           id: 6,
           label: '二级 2-2'
         }]
       },
      {
         id: 3,
         label: '一级 3',
         children: [{
           id: 7,
           label: '二级 3-1'
         }, {
           id: 8,
           label: '二级 3-2'
         }]
      }
    ]

通用list数据源样例(能分辨父子关系的list):

listTreeData: [
        {
          id:'1',  
          name: '根目录',  
          parentCode:'-1',// 根目录标志
          catalogId :'111111', // 目录标识
        },
        {
          id:'2',
          name:'目录1',
          parentCode:'111111',
          catalogId:'aaaaaa',
        },
        {
          id:'3',
          name:'目录2',
          parentCode:'111111',
          catalogId:'bbbbbb',
        },
        {
          id:'4',
          name:'目录3',
          parentCode:'111111',
          catalogId:'cccccc',
        },
        {
          id:'1-1',
          name:'目录1-1',
          parentCode:'aaaaaa',
          catalogId:'dddddd',
        },
        {
          id:'1-2',
          name:'目录1-2',
          parentCode:'aaaaaa',
          catalogId:'eeeeee',
        },
        {
          id:'1-3',
          name:'目录1-3',
          parentCode:'aaaaaa',
          catalogId:'ffffff',
        },
        {
          id:'1-4',
          name:'目录1-4',
          parentCode:'aaaaaa',
          catalogId:'gggggg',
        },
        {
          id:'2-1',
          name:'目录2-1',
          parentCode:'bbbbbb',
          catalogId:'iiiii',
        },
        {
          id:'2-2',
          name:'目录2-2',
          parentCode:'bbbbbb',
          catalogId:'jjjjjj',
        },
        {
          id:'2-3',
          name:'目录2-3',
          parentCode:'bbbbbb',
          catalogId:'kkkkkk',
        },
        {
          id:'2-4',
          name:'目录2-4',
          parentCode:'bbbbbb',
          catalogId:'lllll',
        },
        {
          id:'3-1',
          name:'目录3-1',
          parentCode:'cccccc',
          catalogId:'333333',
        },
        {
          id:'3-2',
          name:'目录3-2',
          parentCode:'cccccc',
          catalogId:'55555',
        },
        {
          id:'3-3',
          name:'目录3-3',
          parentCode:'cccccc',
          catalogId:'666666',
        },
        {
          id:'3-4',
          name:'目录3-4',
          parentCode:'cccccc',
          catalogId:'7777777',
        }
      ]

list数据转树结构数据通用方法:

// 将list 结构的数据转成tree结构
    // myId 表示当前结点的唯一值
    // pId 表示父节点的唯一值
    // list list数据源 含有父子关系的数据源
    list2Tree:function(myId,pId,list)
    {
      debugger;
      var nodes = [] ;
      // get the top level
      for(var i=0;i<list.length;i++)
      {
        var row = list[i];
        if( !this.exists(list,row[pId],myId))
        {
            row.label = row.name;
            nodes.push(row);
        }
      }
      var toDo = [] ;
      for(var j=0 ;j<nodes.length;j++)
      {
        toDo.push(nodes[j]);
      }

      while(toDo.length)
      {
          var node = toDo.shift();// the parent node
          // get the children node 
          for(var k=0;k<list.length;k++)
          {
            var row1 = list[k];
            if(  row1[pId] == node[myId] )
            {
                row1.label = row1.name;  // label为树节点显示的名字,若list数据中已经存在label了,则此处可以不用,无id这个字段则需要跟这个类似处理  
                if(node.children)
                {
                  node.children.push(row1);
                }
                else
                {
                  node.children =[row1];
                }
                 toDo.push(row1);
            }
            
          }
      }
      return nodes ;
    },
    exists:function(list,parentId,myId)
    {
        for(var i=0;i<list.length;i++)
        {
          if(list[i][myId] === parentId)
          {
              return true;
          }
        }
        return false ;
    },

通用方法处理参考资源路径如下:https://www.cnblogs.com/guoyansi19900907/p/7490160.html

转化后的tree结构数据源和树通用样例结构一直,数据中必须存在id,label,children。

对树节点的过滤处理方法

filter-node-method
对树节点进行筛选时执行的方法,返回 true 表示这个节点可以显示,返回 false 则表示这个节点会被隐藏

具体的方法说明以及树的使用,可以参考以下资源路径:https://element.eleme.cn/#/zh-CN/component/tree

本人亲测方案完整方案如下:

<template>
<div class="treePlane">
    <div class="filterPlane" >
        <el-row>
            <el-col :span='6'>
                <el-input v-model="name" placeholder='请输入'/>
            </el-col> 
            <el-col :span='6'>
                <el-button @click="search" >查询</el-button>
            </el-col> 
             <el-col :span='4'>
                <el-button @click="reset">重置</el-button>
            </el-col> 
        </el-row>
       
    </div>
    <el-tree
        :data="transformData"
        ref="treeComponent"
        show-checkbox
        :default-expand-all=true
        :filter-node-method="filterNode"
        node-key="name">
    </el-tree>
</div>
</template>
<script>
import tree from '@/assets/js/treeData.js'


export default {

  mixins: [tree],
  data () {
    return {
      name: '',
      transformData:[],
    }
  },
  created:function() {
      this.init();
  },
  methods:
  {
    init: function (isInit) {
        if(!isInit)
        {
          this.transformData =[];
        }
        var a = 'catalogId' ;
        var b= 'parentCode';
        var data = this.list2Tree(a,b,this.listTreeData);
        debugger;
        this.transformData = data;
    },
    search:function()
    {
        var value = this.name ;
        this.$refs.treeComponent.filter(value.trim())
    },
    reset: function () {
      this.name = '';
      this.$refs.treeComponent.filter('')
    },
    filterNode(value, data) {
      if (!value) return true
      return data.label.indexOf(value) !== -1
    },
    // 将list 结构的数据转成tree结构
    list2Tree:function(myId,pId,list)
    {
      debugger;
      var nodes = [] ;
      // get the top level
      for(var i=0;i<list.length;i++)
      {
        var row = list[i];
        if( !this.exists(list,row[pId],myId))
        {
            row.label = row.name;
            nodes.push(row);
        }
      }
      var toDo = [] ;
      for(var j=0 ;j<nodes.length;j++)
      {
        toDo.push(nodes[j]);
      }

      while(toDo.length)
      {
          var node = toDo.shift();// the parent node   方法用于把数组的第一个元素从其中删除,并返回第一个元素的值
          // get the children node 
          for(var k=0;k<list.length;k++)
          {
            var row1 = list[k];
            var a= row1[pId] ;
            var b = node[myId] ;
            if( a == b )
            {
                // row1.children = [];
                row1.label = row1.name;
                if(node.children)
                {
                  node.children.push(row1);
                }
                else
                {
                  node.children =[row1];
                }
                 toDo.push(row1);
            }
            
          }
      }
      return nodes ;
    },
    exists:function(list,parentId,myId)
    {
        for(var i=0;i<list.length;i++)
        {
          if(list[i][myId] === parentId)
          {
              return true;
          }
        }
        return false ;
    },
  }
}
</script>
<style scoped>
  .treePlane{
      margin-left: 20%;
  }
</style>

其中引入的js文件内容就是上面提到的 通用list数据源样例(能分辨父子关系的list):

效果图如下:
在这里插入图片描述
声明:本着尊重他人知识产权和尊重他人劳动成果的原则,以上涉及参考他人博客内容部分,原作者博客地址已附上相应位置。
如需转载本文,请附上本文原地址,如若未附上本文地址,本文作者保留相关追究权利。

### 回答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 提供的组件,可以更加轻松地实现形结构的展示,并且具有良好的用户交互体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值