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 相关文章推荐
JavaScript写的一个DIV 弹出网页对话框
Aug 14 Javascript
javascript 简单抽屉效果的实现代码
Mar 09 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
AngularJS基础学习笔记之简单介绍
May 10 Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 Javascript
javaScript给元素添加多个class的简单实现
Jul 20 Javascript
微信小程序 解决swiper不显示图片的方法
Jan 04 Javascript
jQuery基于正则表达式的表单验证功能示例
Jan 21 Javascript
数组Array的一些方法(总结)
Feb 17 Javascript
利用原生JS与jQuery实现数字线性变化的动画
Feb 24 Javascript
解决iView中时间控件选择的时间总是少一天的问题
Mar 15 Javascript
vue初始化动画加载的实例
Sep 01 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中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
phplot生成图片类用法详解
2015/01/06 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
分享Python字符串关键点
2015/12/13 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python实现三维拟合的方法
2018/12/29 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python pycharm的安装及其使用
2019/10/11 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
Python读写压缩文件的方法
2020/07/30 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
P/Invoke是什么
2015/07/31 面试题
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
高二历史教学反思
2014/01/25 职场文书
粗加工管理制度
2014/02/04 职场文书
工程专业应届生求职信
2014/02/19 职场文书
社区娱乐活动方案
2014/08/21 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server