vue.js 使用行跨度渲染表

Posted

技术标签:

【中文标题】vue.js 使用行跨度渲染表【英文标题】:vue.js render table with rowspans 【发布时间】:2018-11-06 09:18:07 【问题描述】:

我是 vue.js 的新手,我找不到使用 vue 将以下数据呈现到具有行跨度的 html 表中的方法。


   "title":"Monthly Sales",
   "monthlySales":[
      
         "product":"P123",
         "months":[
            
               "month":"January",
               "unitPrice":"$80",
               "unitsSold":2200
            ,
            
               "month":"February",
               "unitPrice":"$82",
               "unitsSold":1900
            ,
            
               "month":"March",
               "unitPrice":"$81",
               "unitsSold":1800
            
         ]
      ,
      
         "product":"Q456",
         "months":[
            
               "month":"January",
               "unitPrice":"$20",
               "unitsSold":200
            ,
            
               "month":"February",
               "unitPrice":"$22",
               "unitsSold":100
            
         ]
      
   ]

我想创建这样的输出:http://jsbin.com/hucufezayu/edit?html,output

我们如何用这些数据渲染这种表格?

【问题讨论】:

假设您正在使用组件,您不只是相应地定义组件吗?例如。 <custom-table> 包括 <row-span> 包括 <custom-row> 【参考方案1】:

这应该可以解决问题:

<template>
  <div id="app">
    <table border="1" style="border-collapse: collapse">
      <thead>
      <th>Product</th>
      <th>Month</th>
      <th>Unit price</th>
      <th>No. sold</th>
      </thead>
      <tbody>
      <template v-for="mSale in salesData.monthlySales">
        <tr v-for="(month, key) in mSale.months">
          <td v-if="key == 0" :rowspan="mSale.months.length">    mSale.product</td>
          <td>month.month</td>
          <td>month.unitPrice</td>
          <td>month.unitsSold</td>
        </tr>
      </template>
      </tbody>
    </table>
  </div>
</template>

<script>
  export default 
    name: 'app',
    data() 
      return 
        salesData: jsonData
      
    
  
</script>

【讨论】:

v-if="key == 0"有什么意义? 是允许仅在系列的第一个occurrency显示月份值,从而允许使用rowspan。有关行跨度的更多信息,请参阅w3schools.com/tags/att_td_rowspan.asp。 @yogmk 我忘了在回答中提到你,对不起。 没关系。我发现您的解决方案在我当前的项目中很有用。所以谢谢你。

以上是关于vue.js 使用行跨度渲染表的主要内容,如果未能解决你的问题,请参考以下文章

Vue js v-if在共享切换按钮上进行条件渲染

在使用 Vue.js 和 Vue CLI 3 处理一些处理后通过道具渲染项目

表格中的 vue.js 条件渲染

vue.js渲染时间磋该怎么处理

怎样保证js在页面元素渲染完后再执行

使用带有渲染功能的 Vue.js 3 片段