目录

一、安装依赖

本例中,使用render-content进行树节点内容的自定义,因此需要支持JSX语法。(见参考资料第3个)

  1. Git bash中运行一下指令
  2. cnpm install\
  3. babel-plugin-syntax-jsx\
  4. babel-plugin-transform-vue-jsx\
  5. babel-helper-vue-jsx-merge-props\
  6. babel-preset-es2015\
  7. --save-dev

 二、常用属性、事件

  1.  
常用属性
Attributes(属性名) 描述 type(类型) default(默认值)
node-key

每个树节点用来作为唯一标识的属性,

整棵树应该是唯一的

string
default-expanded-keys 默认展开的节点的key的数组 array
auto-expand-parent 展开子节点的时候是否自动展开父节点 boolean true
props  配置选项 object
render-content   树节点的内容区的渲染Function Function(h,{node,data,store})
highlight-current 是否高亮当前选中节点 boolean false
expand-on-click-node

是否在点击节点的时候展开或者收缩节点,

默认值为 true,如果为 false

则只有点箭头图标的时候才会展开或者收缩节点。

boolean true
lazy 是否懒加载子节点,需与 load 方法结合使用 boolean false
load  加载子树数据的方法,仅当 lazy 属性为true 时生效 function(node, resolve)
  1.  
Events(事件)
事件名称 描述 回调参数
node-click

节点被点击时的回调

共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身。
  1.  

三、demo应用:

3.1 html代码

  1. <el-tree
  2. node-key="id"
  3. :default-expanded-keys="[0]" //0对应下方①
  4. :auto-expand-parent="true"
  5. :props="defaultProps"
  6. :render-content="renderContent"
  7. :highlight-current="true"
  8. :expand-on-click-node="false"
  9. lazy
  10. :load="loadChildData"
  11. @node-click="handleNodeClick">
  12. </el-tree>

ps:

  • 本例中点击节点箭头时才展开子级节点,执行loadChildData操作,选中节点(并非箭头)时才执行handleNodeClick操作

  •  将tree的某些节点设置为默认展开时,需要设置 default-expanded-keys 和 node-key,两者缺一不可。其中node-key的值为节点数据中的一个字段名,该字段在整棵树中是唯一的。

    例如:node-key="id",

    其中default-expanded-keys的值为数组,其值为展开项的id。比如::default-expanded-keys="[2, 3]"

  •  lazy 需要和load结合使用,本例中采用懒加载,动态加载节点数据的方法加载数据

  • 会调2次接口,第一次接口为第一级数据,第二次为第一级的child数据,此结果于

    1. :default-expanded-keys="[0]"
    1. lazy
    1. :load="loadChildData"这是三个属性有关

3.2应用中用到的属性用法

3.2.1     :default-expanded-keys(默认展开项)

  1. <el-tree
  2. :data="data2"
  3. show-checkbox
  4. node-key="id"
  5. :default-expanded-keys="[2, 3]"
  6. :default-checked-keys="[5]"
  7. :props="defaultProps">
  8. </el-tree>
  9.  
  10. <script>
  11. export default {
  12. data() {
  13. return {
  14. data2: [{
  15. id: 1,
  16. label: '一级 1',
  17. children: [{
  18. id: 4,
  19. label: '二级 1-1',
  20. children: [{
  21. id: 9,
  22. label: '三级 1-1-1'
  23. }, {
  24. id: 10,
  25. label: '三级 1-1-2'
  26. }]
  27. }]
  28. }, {
  29. id: 2,
  30. label: '一级 2',
  31. children: [{
  32. id: 5,
  33. label: '二级 2-1'
  34. }, {
  35. id: 6,
  36. label: '二级 2-2'
  37. }]
  38. }, {
  39. id: 3,
  40. label: '一级 3',
  41. children: [{
  42. id: 7,
  43. label: '二级 3-1'
  44. }, {
  45. id: 8,
  46. label: '二级 3-2'
  47. }]
  48. }],
  49. defaultProps: {
  50. children: 'children',
  51. label: 'label'
  52. }
  53. };
  54. }
  55. };
  56. </script>

default-expanded-keys(默认展开的节点)效果图

3.2.2  :props="defaultProps" 用法

  1. :props="defaultProps" 
    defaultProps: {
  2. children: 'children',
  3. label: 'title',
  4.  
  5. },

3.2.3通过render-content方法定义树节点内容(js代码)

  1. renderContent(h, { node, data, store }) {
  2. let icon;
  3. let platForm;
    let isShow = false;
  4. if(platForm == 0){
  5. icon = <icon-svg icon-style="icon-style" icon-class="el-icon-pc"></icon-svg>);
         isShow = true; 
  6. }else{
  7. icon = <icon-svg icon-style="icon-style" icon-class="el-icon-wx"></icon-svg>);
         isShow = false;
  8.    }
  9. return (
  10. <span style="font-size: 14px; padding-right: 8px">
  11. <span class="normalText">
  12. {icon}
  13. <span style="color: #333;"> {node.label} </span>
  14. </span>
  15. {isshow ? '' :
  16. <span class="pos-a" style="right:20px; top:0;">
  17. <span style="font-size: 12px;line-height: 30px;"
  18. on-click={() => this.operation(node, data, event)}>
  19. <icon-svg icon-style="icon-style" icon-class="el-icon-ifcn-gengduo"></icon-svg>
  20. </span>
  21. </span>
  22. }
  23.  
  24. </span>
  25. );
  26. }

3.2.4 :load="loadChildData" (load 加载子树数据的方法,仅仅当lazy属性为true时生效)(js代码)

  1. loadChildData(node, resolve) {
    ......接口调用
        resolve(接口数据);//内容更新
    //第一级为选中并执行node-click操作
    if (node && node.level == 0){
      this.levelTwoDatas = node.childNodes[0];
      this.$nextTick(function () {//
        let obj= document.getElementsByClassName('el-tree-node__content')[0];
        obj.click();
      })
    }
  1. },

node:

 3.2.5 @node-click="handleNodeClick"

  1. handleNodeClick(data, node, vuecomponent) {
  2. console.log('data:', data,'\n' ,'node:', node, '\n', 'vuecomponent',vuecomponent);
  3. }

data:(当前选中节点的数据)

node: (node当前节点的信息,含当前节点的数据data(和上图一致),父节点的信息parent)

 3.2.6更新二级数据

  1. this.$set(this.levelTwoDatas, 'children', []);
  2. this.levelTwoDatas.data.children = 接口数据;

3.2.7接口情况

第一次调接口的数据:

第2次调接口,树节点数据(根据父节点的id,获取子节点数据)

3.2.8页面效果图:

相关资料:

  

 

【vue】使用vue+element搭建项目,Tree树形控件使用的更多相关文章

  1. Element ui 使用 Tree 树形控件

    使用树形控件需要映入 jsx才能运行链接:https://github.com/vuejs/babel-plugin-transform-vue-jsx#usage npm install\ babe ...

  2. vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解

    做后端管理系统,永远是最蛋疼.最复杂也最欠揍的事情,也永远是前端开发人员最苦逼.最无奈也最尿性的时刻.蛋疼的是需求变幻无穷,如同二师兄的三十六般变化:复杂的是开发难度寸步难行,如同蜀道难,难于上青天: ...

  3. Element ui tree树形控件获取当前节点id和父节点id

    低版本Element ui tree树形控件获取当前节点id和父节点id的方法:点击查看 最新版本Element ui tree树形控件获取当前节点id和父节点id教程: 1.找到node_modul ...

  4. vue_elementUI_ tree树形控件 获取选中的父节点ID

    el-tree 的 this.$refs.tree.getCheckedKeys() 只可以获取选中的id 无法获取选中的父节点ID想要获取选中父节点的id;需要如下操作1. 找到工程下的node_m ...

  5. ElementUI Tree树形控件renderContent return时报错

    问题描述: 使用Tree树形控件使用render-content渲染时return后报错或npm run dev时候报错,报错信息相同,如下: 问题分析: renderContent函数中需要使用js ...

  6. BootstrapBlazor实战 Tree树形控件使用(2)

    继续上篇实战BootstrapBlazor树型控件Tree内容, 本篇主要讲解整合Freesql orm快速制作数据库后台维护页面 demo演示的是Sqlite驱动,FreeSql支持多种数据库,My ...

  7. BootstrapBlazor实战-Tree树形控件使用(1)

    实战BootstrapBlazor树型控件Tree的使用, 以及整合Freesql orm快速制作数据库后台维护页面 demo演示的是Sqlite驱动,FreeSql支持多种数据库,MySql/Sql ...

  8. vue-element Tree树形控件通过id默认选中

    一.设置 1.给树形控件设置 ref="tree" node-key="id" 2.在获取数据的位置加上 this.$nextTick(() => { t ...

  9. easyui Tree树形控件的异步加载

    Tree控件 $('#partyOrgTree').tree({ checkbox: false, url: getDataUrl, onClick: function (node) { getDiv ...

随机推荐

  1. 信利SC123金融财务计算器评测——不错的HP 12C仿品

    最近X宝48包邮购入信利SC123金融计算器,只是为了玩一玩(没错你的好友盗版狂魔又上线了),因为这是目前市面上能买到的最便宜的金融计算器了,也是能买到的最便宜的RPN计算器,顺手出个评测.这个计算器 ...

  2. .NET 基金会完成第一次全面改选

    .NET基金会是一个独立的组织,支持.NET社区和开源,旨在拓宽和加强.NET生态系统和社区.这可以通过多种方式完成,包括项目指导,指导,法律和营销帮助,技术和财务支持设置等,2014年微软组织成立. ...

  3. 【死磕Java并发】-----Java内存模型之happens-before

    在上篇博客([死磕Java并发]-–深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题.那么我们正确使用同步.锁的情况下 ...

  4. #Java学习之路——基础阶段二(第八篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  5. 【朝花夕拾】四大组件之(一)Broadcast篇

    前言 笔者最近在探究ANR及源码的过程中,发现对Broadcast的一些应用层面上的知识有的感觉比较生疏,有的记忆不准确,有的认识不完整.所谓“基础不牢,地动山摇”,于是就梳理了一下Broadcast ...

  6. springboot~mybatis里localdatetime序列化问题

    问题起因 主要是使用mybatis作为ORM之后,返回的对象为Map,然后对于数据库的datetime,datestamp类型返回为时间戳而不是标准的时间,这个问题解决方案有两种,大叔分析一下: 在m ...

  7. 09 使用Tensorboard查看训练过程

    打开Python Shell,执行以下代码: import tensorflow as tf import numpy as np #输入数据 x_data = np.linspace(-1,1,30 ...

  8. SmartSql 常见问题

    常见问题 为什么不支持 Linq? SmartSql 希望 开发人员更多的接触 Sql ,获得绝对的控制权与安全感.所以目前没有计划支持 Code First 编程模式. 我想好了Sql怎么写,然后再 ...

  9. Springboot 系列(十三)使用邮件服务

    在我们这个时代,邮件服务不管是对于工作上的交流,还是平时的各种邮件通知,都是一个十分重要的存在.Java 从很早时候就可以通过 Java mail 支持邮件服务.Spring 更是对 Java mai ...

  10. Springboot 系列(四)Spring Boot 日志框架

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 Spring 框架选择使用了 JCL 作为默 ...