组件: Element(地址:http://element.eleme.io/#/zh-CN/component/tree):Tree树形控件

<el-tree ref="expandMenuList" class="expand-tree"
:data="setTree"
highlight-current
:props="defaultProps"
:expand-on-click-node="false"
:render-content="renderContent"
@node-click="handleNodeClick">
</el-tree>
renderContent:内容渲染     props:数据配置     node-click:节点被点击时的回调

1)请求方式:Vue-resource
export const list = flag=> {
return http.post(`/Search/list`, flag).then(res => res.data)
}
2)通过后台接口获取数据
getDataList(){
this.loading = true; //element loading加载
list({ }).then(res => {
this.loading = false;
if (res.status) {
this.setTree= res.data
}
else {
this.$alert(res.message, "错误", {
confirmButtonText: "确定"
});
}
});
}

 3)返回数据:parentId等于0的是父级,id等于parentId的是子级

[
{
"id":13,
"parentId":0,
"order":1,
"name":"truck",
},
{
"id":16,
"pluginId":null,
"parentId":0,
"order":1,
"name":"sca",
},
{
"id":17,
"pluginId":6,
"parentId":16,
"order":1,
"name":"abcf",
}
]
4)转换为json树形结构  (方法放在methods里面)
methods: {
getListData() {
let dataArray = [];
this.datas.forEach(function (data) {
if(data.enabled==true){
let parentId = data.parentId;
if (parentId == 0) {
let objTemp = {
id: data.id,
name: data.name,
order: data.order,
parentId: parentId,
}
dataArray.push(objTemp);
}
}
})
this.data2treeDG(this.datas, dataArray)
},
data2treeDG(datas, dataArray) {
for (let j = 0; j < dataArray.length; j++) {
let dataArrayIndex = dataArray[j];
let childrenArray = [];
let Id = dataArrayIndex.id;
for (let i = 0; i < datas.length; i++) {
let data = datas[i];
if(data.enabled==true){
let parentId = data.parentId;
if (parentId == Id) {//判断是否为儿子节点
let objTemp = {
id: data.id,
name: data.name,
order: data.order,
parentId: parentId,
}
childrenArray.push(objTemp);
}
}
}
dataArrayIndex.children = childrenArray;
if (childrenArray.length > 0) {//有儿子节点则递归
this.data2treeDG(datas, childrenArray)
}
}
this.setTree = dataArray;
return dataArray;
},
}
5)格式化后的树形结构数据(setTree):
[
{ "id":44,
"name":"扫描w2",
"order":1,
"parentId":0,
"children":[
{ "id":125,
"name":"plplupluppluplplupl",
"order":2,
"parentId":44,
"children":[
"id":44,
"name":"plplupluppluplplupl",
"order":2,
"parentId":44
]
},
{
"id":124,
"name":"pluginplugin",
"order":2,
"parentId":44,
"children":[ ]
}
]
}
]

 6)渲染

methods: {
showOrEdit(data) {
debugger;
if (this.isEdit) {
return <input type="text" style="width:80px" value={data.Name} on-blur={ev => this.edit_sure(ev, data)}/>
}
else{
return <span>{data.Name}</span>
}
},
renderContent(h, {node, data, store}) {
if(data.enabled==true&&data.parentId==0){
return (
<span>
<span>
{ this.showOrEdit(data) }
</span>
<span style="margin-left: 15px;">
<i class="el-icon-plus" on-click={ () => this.NodeAdd(node, data) }></i>
</span>
</span>)
}
else if(data.enabled==true&&data.parentId!=0){
return (
<span>
<span>
{ this.showOrEdit(data) }
</span>
</span>)
}
else {
return (
<span>
<span style="color: red;">
{ this.showOrEdit(data) }
</span>
</span>)
}
}
}
}

  

 


 

vue+Element实现tree树形数据展示的更多相关文章

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

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

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

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

  3. vue+echarts+datav大屏数据展示及实现中国地图省市县下钻

    随着前端技术的飞速发展,大数据时代的来临,我们在开发项目时越来越多的客户会要求我们做一个数据展示的大屏,可以直观的展示用户想要的数据,同时炫酷的界面也会深受客户的喜欢. 大屏展示其实就是一堆的图表能够 ...

  4. Element ui tree树形控件获取父节点id

    Element-ui官网给的方法 getCheckedKeys() { console.log(this.$refs.tree.getCheckedKeys()); }, 这种只有在所有子级都被选中的 ...

  5. Vue+element UI实现表格数据导出Excel组件

    介绍 这是一个可以将页面中的表格数据导出为Excel文件的功能组件,该组件一般与表格一起使用,将表格数据传给组件,然后通过点击组件按钮可将表格中的数据导出成Excel文件. 使用方法 由于封装该组件内 ...

  6. vue+element 给表格添加数据,页面不实时刷新的问题

    由于页面加载时,使用了keep-alive,keep-alive具有数据缓存作用,当在添加页面添加成功时,返回主页面没有立即更新.数据有缓存. 解决办法如下: 将获取数据列表的方法放到activate ...

  7. 转:vue+element实现树形组件

    项目中需要用到树形组件,在网上发现一个用vue+element实现的树形组件,现在记录下: demo地址:https://github.com/wilsonIs/vue-treeSelect

  8. element-ui tree树形组件自定义实现可展开选择表格

    最近做项目遇到一个需求,表格里可以展开,可以选择,大概效果如下图: 一开始是在table组件里找方法,使用了表格的合并方法,效果是实现了,但是表格的多选每次触发时,都会执行好几次,而且没法实现一部分的 ...

  9. VUE+Element 前端应用开发框架功能介绍

    前面介绍了很多ABP系列的文章<ABP框架使用>,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机 ...

随机推荐

  1. C#——单元测试

    测试搭建请看:http://www.cnblogs.com/Look_Sun/p/4514732.html 右键不出现Generate Unit Test选项请参考:http://www.jb51.n ...

  2. 关于requestAnimationFrame()和cancelAnimationFrame()与定时器之间的比较

    在渲染页面动画的时候,其实也没有必要用定时器(setInterval),其实requestAnimationFrame()和cancelAnimationFrame()也能达到相应的效果,他是HTML ...

  3. IE,表头固定

    <html>  <head>   <title>表头固定</title>    <style type="text/css"& ...

  4. LeetCode(15)3Sum

    题目如下: Python代码: def threeSum(self, nums): res = [] nums.sort() for i in xrange(len(nums)-2): if i &g ...

  5. CorelDRAW X6+PhotoZoom这组合,无敌了啊!

    520就这样毫无察觉的过去了,对于额这种单身狗,额表示,什么520,什么情人节,统统略过,,可是,可是,即便这样,还是硬生生的吃了一把来势凶猛的远在天际的狗粮,当我看到CorelDRAW X6和Pho ...

  6. Django路由中的include

    include(module,namespace = None,app_name = None)[source] include(pattern_list) include((pattern_list ...

  7. [置顶] Linux 常用命令集锦

    出处:http://www.vaikan.com/what-are-the-most-useful-swiss-army-knife-one-liners-on-unix/ Linux命令行里的&qu ...

  8. 一些css布局

    # css布局 #---bootstrap   详情请看官方文档---首先要按照相应的官方规范引入相应的css js fonts等 container相当于一个容器 一般设置一个 接下来设置行 用ro ...

  9. POJ 3517 And Then There Was One( 约瑟夫环模板 )

    链接:传送门 题意:典型约瑟夫环问题 约瑟夫环模板题:n个人( 编号 1-n )在一个圆上,先去掉第m个人,然后从m+1开始报1,报到k的人退出,剩下的人继续从1开始报数,求最后剩的人编号 /**** ...

  10. 为什么在index.jsp里面引入了common.js,在item-add.jsp以及其他一些jsp文件里面就不需要引入common.jsne ?

    那是因为,index.jsp页面的根节点是body,hrml.是一个完整的网页.那我们再看item-add.jsp页面,他节点是div,只是一个html的片段,并不是一个完整的网页,在easyUI中, ...