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 相关文章推荐
在网页里看flash的trace数据的js类
Jan 10 Javascript
Jquery AJAX 用于计算点击率(统计)
Jun 30 Javascript
jQuery实现的导航条切换可显示隐藏
Oct 22 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
JavaScript性能优化总结之加载与执行
Aug 11 Javascript
你知道setTimeout是如何运行的吗?
Aug 16 Javascript
js判断价格,必须为数字且不能为负数的实现方法
Oct 07 Javascript
深入剖析Express cookie-parser中间件实现示例
Feb 01 Javascript
详解在Javascript中进行面向切面编程
Apr 28 Javascript
vue 实现input表单元素的disabled示例
Oct 28 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
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
如何删除多级目录
2006/10/09 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
JS按字节截取字符长度实例
2013/11/20 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
医学生求职自荐信
2013/10/25 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
活动策划邀请函
2014/02/06 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
个人合作协议范本
2015/08/06 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server