当前位置:首页 > VUE

vue实现垂直表格

2026-01-18 05:50:58VUE

实现垂直表格的基本思路

在Vue中实现垂直表格(即表头在左侧,数据向右展开的布局),可以通过调整HTML结构和CSS样式来实现。垂直表格常用于对比数据或展示属性-值对。

HTML结构设计

使用Vue的模板语法创建基础结构,通过v-for循环渲染数据:

<template>
  <div class="vertical-table">
    <div class="row" v-for="(row, index) in tableData" :key="index">
      <div class="header-cell">{{ row.header }}</div>
      <div class="data-cell" v-for="(cell, cellIndex) in row.data" :key="cellIndex">
        {{ cell }}
      </div>
    </div>
  </div>
</template>

CSS样式设置

通过Flex布局实现垂直表格的排列,确保表头固定在左侧:

vue实现垂直表格

.vertical-table {
  display: flex;
  flex-direction: column;
  border: 1px solid #ddd;
}

.row {
  display: flex;
  border-bottom: 1px solid #ddd;
}

.header-cell {
  flex: 0 0 150px;
  padding: 8px;
  background-color: #f5f5f5;
  font-weight: bold;
  border-right: 1px solid #ddd;
}

.data-cell {
  flex: 1;
  padding: 8px;
}

Vue数据定义

在Vue组件的data中定义表格数据,结构需包含表头和数据数组:

export default {
  data() {
    return {
      tableData: [
        { header: '姓名', data: ['张三', '李四', '王五'] },
        { header: '年龄', data: [25, 30, 28] },
        { header: '职业', data: ['工程师', '设计师', '产品经理'] }
      ]
    }
  }
}

动态数据绑定

若需从API获取数据,可在mountedcreated钩子中异步加载:

vue实现垂直表格

export default {
  data() {
    return {
      tableData: []
    }
  },
  async mounted() {
    const response = await fetch('/api/vertical-table-data');
    this.tableData = await response.json();
  }
}

响应式布局优化

添加媒体查询确保在小屏幕下的显示效果:

@media (max-width: 768px) {
  .header-cell {
    flex: 0 0 100px;
  }
}

添加交互功能

通过Vue方法实现行高亮或点击事件:

<div class="row" 
     v-for="(row, index) in tableData" 
     :key="index"
     @click="handleRowClick(row)"
     :class="{ 'active-row': activeRow === index }">
</div>
methods: {
  handleRowClick(row) {
    console.log('Clicked row:', row);
    this.activeRow = index;
  }
}

完整组件示例

整合以上代码的完整单文件组件示例:

<template>
  <div class="vertical-table">
    <div class="row" 
         v-for="(row, index) in tableData" 
         :key="index"
         @click="handleRowClick(index)"
         :class="{ 'active-row': activeRow === index }">
      <div class="header-cell">{{ row.header }}</div>
      <div class="data-cell" v-for="(cell, cellIndex) in row.data" :key="cellIndex">
        {{ cell }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeRow: null,
      tableData: [
        { header: '姓名', data: ['张三', '李四', '王五'] },
        { header: '年龄', data: [25, 30, 28] },
        { header: '职业', data: ['工程师', '设计师', '产品经理'] }
      ]
    }
  },
  methods: {
    handleRowClick(index) {
      this.activeRow = index;
    }
  }
}
</script>

<style scoped>
.vertical-table {
  display: flex;
  flex-direction: column;
  border: 1px solid #ddd;
}
.row {
  display: flex;
  border-bottom: 1px solid #ddd;
}
.header-cell {
  flex: 0 0 150px;
  padding: 8px;
  background-color: #f5f5f5;
  font-weight: bold;
  border-right: 1px solid #ddd;
}
.data-cell {
  flex: 1;
  padding: 8px;
}
.active-row {
  background-color: #e6f7ff;
}
@media (max-width: 768px) {
  .header-cell {
    flex: 0 0 100px;
  }
}
</style>

标签: 表格vue
分享给朋友:

相关文章

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身: &…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue 实现闪烁

vue 实现闪烁

Vue 实现闪烁效果的方法 方法一:使用 CSS 动画 在 Vue 组件中定义一个闪烁的 CSS 动画,通过绑定 class 或 style 来控制元素的闪烁效果。 <template>…

vue实现框选

vue实现框选

Vue 实现框选功能 在 Vue 中实现框选功能通常需要监听鼠标事件,计算选区范围,并根据选区范围高亮或选中元素。以下是实现框选功能的关键步骤。 监听鼠标事件 在 Vue 模板中,为容器元素绑定鼠标…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,以下是一些常见的方法: 使用 v-bind 绑定图片路径 通过 v-bind(或简写为 :)动态绑定图片的…

vue实现 页面

vue实现 页面

Vue 实现页面的核心方法 创建 Vue 项目 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 是官方脚手架工具,适合传统项目;Vite 提供更快的现代构建体验。 npm cre…