Element-ui tree组件自定义节点使用方法代码详解


Posted in Javascript onSeptember 17, 2018

工作上使用到element-ui tree 组件,主要功能是要实现节点拖拽和置顶,通过自定义内容方法(render-content)渲染树代码如下~

<template>
 <div class="sortDiv">
  <el-tree :data="sortData" draggable node-key="id" ref="sortTree" default-expand-all :expand-on-click-node="false" :render-content="renderContent" :allow-drop="allowDrop">
  </el-tree>
  <el-button @click="getData">获取数据</el-button>
 </div>
</template>
<script>
export default {
 name: 'Sort',
 data() {
  return {
   sortData: [
    {
     id: 1,
     label: '一级 1',
     checkItem: true,
     children: [
      {
       id: 4,
       label: '二级 1-1',
       checkItem: false
      },
      {
       id: 9,
       label: '二级 1-2',
       checkItem: false
      },
      {
       id: 10,
       label: '二级 1-3',
       checkItem: false
      }
     ]
    },
    {
     id: 2,
     label: '一级 2',
     checkItem: true,
     children: [
      {
       id: 5,
       label: '二级 2-1',
       checkItem: true
      },
      {
       id: 6,
       label: '二级 2-2',
       checkItem: true
      }
     ]
    },
    {
     id: 3,
     label: '一级 3',
     checkItem: true,
     children: [
      {
       id: 7,
       label: '二级 3-1',
       checkItem: true
      },
      {
       id: 8,
       label: '二级 3-2',
       checkItem: false
      }
     ]
    }
   ]
  };
 },
 methods: {
  // 是否允许拖拽
  allowDrop (draggingNode, dropNode, type) {
   if (draggingNode.parent === dropNode.parent) {
    return type !== 'inner'
   }
   else return false
  },
  //获取数据
  getData () {
   let result = this.$refs['sortTree'].data;
   let sortRulesMaps = [];
   result.forEach((element, index) => {
    let item = null;
    if (element.checkItem) {
     if (element.children && element.children.length > 0) {
      item = {
       orderIndex: index,
       sortField: element.label,
       rule: ['OTHERS']
      };
      element.children.forEach(i => {
       if (i.checkItem) {
        item.rule.push(i.label);
       }
      });
      item.rule = item.rule.join('_');
     }
    }
    item && sortRulesMaps.push(item);
   });
  },
  //同级置顶功能
  toTop(node, data) {
    let c = Object.assign({}, data);
    if (node.parent.level === 0) {
     this.sortData.unshift(c)
    } else {
     node.parent.data.children.unshift(c);
    }
    this.$refs['sortTree'].remove(data.id);
  },
  changeNode(r, node, data) {
   data.checkItem = r;
  },
  //自定义内容
  renderContent(h, { node, data }) {
   return (
    <span class="custom-tree-node">
     <span>{data.label}</span>
     <span>
      <el-checkbox
       v-model={data.checkItem}
       checked={data.checkItem}
       on-change={r => this.changeNode(r, node, data)}
      />
      <el-button
       size="mini"
       type="text"
       on-click={() => this.toTop(node, data)}
       style="color:#707375;margin-left:10px"
      >
       <i class="fa fa-arrow-up">置顶</i>
      </el-button>
     </span>
    </span>
   );
  }
 }
};
</script>
<style lang="scss">
.sortDiv {
 .el-icon-caret-right:before {
  content: '\E604';
 }
}
.custom-tree-node {
 flex: 1;
 display: flex;
 align-items: center;
 justify-content: space-between;
 font-size: 14px;
 padding-right: 8px;
}
</style>

补充:下面看下使用element的自定义tree组件的实例代码

在使用elemnet-ui时,需要自定义tree的一些元素,采用 :render-content属性来进行渲染这些元素,但是官网给的例子有一点小坑,

renderContent:function(createElement, { node, data, store }) {
        var self = this;
        return createElement('span', [
          createElement('span', node.label),
          createElement('span', {attrs:{
            style:"float: right; margin-right: 200px"
          }},[
            createElement('el-button',{attrs:{
              size:"mini"
            },on:{
              click:function() {
                console.info("点击了节点" + data.id + "的添加按钮");
                store.append({ id: self.baseId++, label: 'testtest', children: [] }, data);
              }
            }},"添加"),
            createElement('el-button',{attrs:{
              size:"mini"
            },on:{
              click:function() {
                console.info("点击了节点" + data.id + "的删除按钮");
                store.remove(data);
              }
            }},"删除"),
          ]),
        ]);
      }

总结

以上所述是小编给大家介绍的Element-ui tree组件自定义节点使用方法代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery选择器中含有空格的使用示例及注意事项
Aug 25 Javascript
jQuery让控件左右移动的三种实现方法
Sep 08 Javascript
利用jq让你的div居中的好方法分享
Nov 21 Javascript
现如今最流行的JavaScript代码规范
Mar 08 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
Jun 23 Javascript
JavaScript中定义对象原型的两种使用方法
Dec 15 Javascript
微信小程序 自定义Toast实例代码
Jun 12 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
扫微信小程序码实现网站登陆实现解析
Aug 20 Javascript
Angular单元测试之事件触发的实现
Jan 20 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
Sep 16 #Javascript
在Vue-cli里应用Vuex的state和mutations方法
Sep 16 #Javascript
分享5个好用的javascript文件上传插件
Sep 16 #Javascript
vuex直接赋值的三种方法总结
Sep 16 #Javascript
vue 实现边输入边搜索功能的实例讲解
Sep 16 #Javascript
vue2过滤器模糊查询方法
Sep 16 #Javascript
vue里面使用mui的弹出日期选择插件实例
Sep 16 #Javascript
You might like
php基础知识:类与对象(5) static
2006/12/13 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
PHP如何对用户密码进行加密
2014/07/31 面试题
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
储备店长岗位职责
2015/04/14 职场文书
2016公司年会通知范文
2015/04/25 职场文书
红歌会主持词
2015/07/02 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang