ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)

2021-09-27 23:01:31  阅读:187  来源: 互联网

标签:box Vue 1230 tem list 树形 child div 模板


 

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

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

html代码

1 2 3 <div id="table-component-div">   <table-component v-for="item in data1" v-bind:list="item"></table-component> </div>

组件模板代码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <script type="text/x-template" id="table-component-template">   <div class="tem">     <div class="tem-p">       <div v-on:click="toggleClick"><i v-bind:style="{'visibility':list.number!=0?'visible':'hidden'}">{{list.number}}</i><span>{{list.name}}</span></div>       <!--绑定数据-->       <div><span>{{list.energyone}}</span></div>       <div><span>{{list.energytwo}}</span></div>       <div><span>{{list.energythree}}</span></div>       <!--绑定class,使数值显示出区分-->       <div><span v-bind:class="{'isgreen':list.huanRatio<0,'isred':list.huanRatio>100}">{{list.huanRatio}}<em>%</em></span></div>       <div><span v-bind:class="{'isgreen':list.tongRatio<0,'isred':list.tongRatio>100}">{{list.tongRatio}}<em>%</em></span></div>     </div>     <div class="tem-c">       <!-- 子组件 -->       <table-component v-for="itemc in list.child" :list="itemc"></table-component>     </div>   </div> </script>

JavaScript代码

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

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

css代码

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

标签:box,Vue,1230,tem,list,树形,child,div,模板
来源: https://www.cnblogs.com/csjoz/p/15345761.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有