Vue組件模板形式實現對象數組數據迴圈為樹形結構

来源:http://www.cnblogs.com/zihuatanejoyn/archive/2017/07/31/7263269.html
-Advertisement-
Play Games

數據結構為數組中包含對象--樹形結構,用Vue組件的寫法實現以下的效果: 樹形列表,縮進顯示層級,第5級數據加底色,數據樣式顯色,點擊展開摺疊數據。本文為用Vue實現方式,另有一篇為用knockout.js的實現方法。 html代碼 組件模板代碼 JavaScript代碼 數據顯示完畢,接下來是樣式 ...


數據結構為數組中包含對象--樹形結構,用Vue組件的寫法實現以下的效果:

樹形列表,縮進顯示層級,第5級數據加底色,數據樣式顯色,點擊展開摺疊數據。本文為用Vue實現方式,另有一篇為用knockout.js的實現方法。

html代碼

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

組件模板代碼

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

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",//掛載dom
103             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         }

好了,到這裡就所有的都寫完了,希望可以幫助有需要的人,如果有更好建議,請留言,謝謝。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 項目升級為react-router4後,就嘗試著根據官方文檔進行代碼分割。https://reacttraining.com/react-router/web/guides/code-splitting 在實際項目中,js,css文件預設通過webpack打包的話會很大,動不動就好幾兆。 在實際場景... ...
  • ...
  • 這個小程式旨在通過自然語言對話查詢快遞、身份證、天氣、詩歌、詞典等等的功能。 自然語言對話,即使用中文語言直接對程式下命令,比如:‘查一下天氣’,“幫我查一下123456這個運單號吧”,“我想聽李白的靜夜思”等等。 如果還是不明白,請閱讀博客 https://i.cnblogs.com/EditPo ...
  • (ฅ´ω`ฅ) 來源《JavaScript高級程式設計第三版》,建議學習時間 2小時 ...
  • 最近開發項目中碰見很多時間戳的轉換,現在總結一下: 1、時間戳轉化成時間格式 function(times){ return new Date(parseInt(times) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); } 2、時間戳轉換為距 ...
  • 數據結構 效果圖 之前已經寫過用Vue實現圖上效果的方法,此篇為用knockout.js實現上圖效果的方法,同樣通過模板將數據綁定到頁面。 模板代碼 請對比之前一篇Vue的方法,瞭解兩種方式模板綁定方式的不同。 模板寫完,在頁面上使用模板。 html代碼 JavaScript代碼 css樣式同之前一 ...
  • 在第三章中(canvas學習總結三:繪製路徑-線段)我們提高Canvas繪圖環境中有些屬於立即繪製圖形方法,有些繪圖方法是基於路徑的。 立即繪製圖形方法僅有兩個strokeRect(),fillRect(),兩個方法都是用來繪製矩形的。 Canvas的API提供瞭如下三個方法,分別用於矩形的清除,描 ...
  • <!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name=" ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...