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 学习笔记 选择器之五
Jul 23 Javascript
Javascript 多浏览器兼容总结(实战经验)
Oct 30 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
Apr 06 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
Nov 23 Javascript
jQuery实现别踩白块儿网页版小游戏
Jan 18 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
Mar 06 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
Mar 23 Javascript
React Native预设占位placeholder的使用
Sep 28 Javascript
Node.js控制台彩色输出的方法与原理实例详解
Dec 01 Javascript
js实现二级联动简单实例
Jan 11 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
Oct 27 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
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
读jQuery之八 包装事件对象
2011/06/21 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
Python3实现生成随机密码的方法
2014/08/23 Python
python利用微信公众号实现报警功能
2018/06/10 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
Python爬虫与反爬虫大战
2020/07/30 Python
Python pip 常用命令汇总
2020/10/19 Python
python drf各类组件的用法和作用
2021/01/12 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
毕业生求职简历的自我评价
2013/10/23 职场文书
给客户的道歉信
2014/01/13 职场文书
机械个人求职信范文
2014/01/24 职场文书
大专会计自我鉴定
2014/02/06 职场文书
安全负责人任命书
2014/06/06 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
个人合作协议范本
2015/08/06 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
汽车车尾标语大全
2015/08/11 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书