博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue组件模板形式实现对象数组数据循环为树形结构
阅读量:5349 次
发布时间:2019-06-15

本文共 6648 字,大约阅读时间需要 22 分钟。

数据结构为数组中包含对象--树形结构,用Vue组件的写法实现以下的效果:

树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据。本文为用Vue实现方式,另有一篇为用knockout.js的实现方法。

html代码

1 
2
3

组件模板代码

1 

JavaScript代码

1 /* 数据结构 */  2         var ko_vue_data=[  3             {  4                 name: "总能耗",  5                 number:"0",  6                 energyone: 14410,  7                 energytwo: 1230,  8                 energythree: 1230,  9                 huanRatio: -36.8, 10                 tongRatio: 148.5, 11                 child: [ 12                     { 13                         name: "租户电耗", 14                         number:"1", 15                         energyone: 14410, 16                         energytwo: 1230, 17                         energythree: 1230, 18                         huanRatio: -36.8, 19                         tongRatio: 148.5, 20                         child: [] 21                     }, 22                     { 23                         name: "公共用电", 24                         number:"2", 25                         energyone: 14410, 26                         energytwo: 1230, 27                         energythree: 1230, 28                         huanRatio: -36.8, 29                         tongRatio: 148.5, 30                         child: [ 31                             { 32                                 name: "暖通空调", 33                                 number:"2.1", 34                                 energyone: 14410, 35                                 energytwo: 1230, 36                                 energythree: 1230, 37                                 huanRatio: -36.8, 38                                 tongRatio: 148.5, 39                                 child: [ 40                                     { 41                                         name: "冷站", 42                                         number:"2.1.1", 43                                         energyone: 14410, 44                                         energytwo: 1230, 45                                         energythree: 1230, 46                                         huanRatio: -36.8, 47                                         tongRatio: 148.5, 48                                         child: [ 49                                             { 50                                                 name: "冷水机组", 51                                                 number:"2.1.1.1", 52                                                 energyone: 14410, 53                                                 energytwo: 1230, 54                                                 energythree: 1230, 55                                                 huanRatio: -36.8, 56                                                 tongRatio: 148.5, 57                                                 child: [] 58                                             } 59                                         ] 60                                     }, 61                                     { 62                                         name: "热力站", 63                                         number: "2.1.2", 64                                         energyone: 14410, 65                                         energytwo: 1230, 66                                         energythree: 1230, 67                                         huanRatio: -36.8, 68                                         tongRatio: 148.5, 69                                         child: [] 70                                     } 71                                 ] 72                             } 73                         ] 74                     } 75                 ] 76             } 77         ]; 78         /* 注册组件 */ 79         Vue.component('table-component', { 80             template:"#table-component-template",//模板 81             props:['list'],//传递数据 82             computed:{
//计算属性 83 isFolder: function () {
//判断数据有没有子集,此效果中暂没用到,有需要的可以看下具体使用方式 84 return this.list.child && this.list.child.length > 0; 85 } 86 }, 87 methods:{ 88 /* 展开折叠操作 */ 89 toggleClick:function(event){ 90 event.stopPropagation();//阻止冒泡 91 var _this = $(event.currentTarget);//点击的对象 92 if (_this.parent().next().is(":visible")) { 93 _this.parent().next().slideUp(); 94 } else { 95 _this.parent().next().slideDown(); 96 } 97 } 98 } 99 });100 /* 创建实例 */101 new Vue({102 el:"#table-component-div",//挂载dom103 data:{104 data1:ko_vue_data//数据105 }106 })

数据显示完毕,接下来是样式效果,缩进显示层级及底色显示。

css代码

1 .tem-p{ 2             clear: both; 3             border-bottom: 1px solid #dddddd; 4             height: 30px; 5             line-height: 30px; 6             -webkit-box-sizing: border-box; 7             -moz-box-sizing: border-box; 8             box-sizing: border-box; 9         }10         .tem-p>div{11             float: left;12             width:100px;13             box-sizing: border-box;14             -ms-text-overflow: ellipsis;15             text-overflow: ellipsis;16             white-space:nowrap;17             overflow: hidden;18             text-align: center;19             -webkit-box-sizing: border-box;20             -moz-box-sizing: border-box;21             box-sizing: border-box;22             height: 100%;23             border-right: 1px solid #dddddd;24         }25         .tem-p>div:first-of-type{26             width: 298px;27             text-align: left;28         }29         .tem>.tem-c .tem-p>div:first-of-type{30             padding-left: 30px;31         }32         .tem>.tem-c .tem-c .tem-p>div:first-of-type{33             padding-left: 60px;34         }35         .tem>.tem-c .tem-c .tem-c .tem-p>div:first-of-type{36             padding-left: 90px;37         }38         .tem>.tem-c .tem-c .tem-c .tem-c .tem-p>div:first-of-type{39             padding-left: 120px;40         }41         .tem>.tem-c .tem-c .tem-c .tem-c .tem-p{42             background-color: #f8f8f8;43         }44         .tem>.tem-c .tem-c .tem-c .tem-c .tem-c .tem-p>div:first-of-type{45             padding-left: 150px;46         }47         .lastChild{48             background: #f8f8f8;49         }50         .isred{51             color: red;52         }53         .isgreen{54             color: green;55         }

好了,到这里就所有的都写完了,希望可以帮助有需要的人,如果有更好建议,请留言,谢谢。

 

转载于:https://www.cnblogs.com/zihuatanejoyn/p/7263269.html

你可能感兴趣的文章
CSS: caption-side 属性
查看>>
python 用数组实现队列
查看>>
认证和授权(Authentication和Authorization)
查看>>
Mac上安装Tomcat
查看>>
CSS3中box-sizing的理解
查看>>
传统企业-全渠道营销解决方案-1
查看>>
Lucene全文检索
查看>>
awk工具-解析1
查看>>
推荐一款可以直接下载浏览器sources资源的Chrome插件
查看>>
CRM product UI里assignment block的显示隐藏逻辑
查看>>
AMH V4.5 – 基于AMH4.2的第三方开发版
查看>>
Web.Config文件配置之配置Session变量的生命周期
查看>>
mysql导入source注意点
查看>>
linux下编译安装nginx
查看>>
ArcScene 高程不同的表面无法叠加
查看>>
[ONTAK2010] Peaks
查看>>
DLL 导出函数
查看>>
windows超过最大连接数解决命令
查看>>
12个大调都是什么
查看>>
angular、jquery、vue 的区别与联系
查看>>