当前位置:首页 > 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实现这一效果主要依赖组件化开发、CSS定位和动态数据绑定。 组件结构设计 创建一个独立的Vue组件…

vue实现toast

vue实现toast

Vue 实现 Toast 的方法 使用第三方库(推荐) 对于快速实现 Toast 功能,推荐使用成熟的第三方库如 vue-toastification 或 vant 的 Toast 组件。 安装 v…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue监听实现

vue监听实现

Vue 监听实现方法 在 Vue 中可以通过多种方式实现监听数据变化或事件触发,以下是常见的几种方法: 使用 watch 选项 watch 是 Vue 提供的核心功能之一,用于观察和响应 Vue 实…

vue实现pwa

vue实现pwa

Vue 实现 PWA 的步骤 Vue 结合 PWA(Progressive Web App)可以创建离线可用的 Web 应用。以下是实现方法: 安装 Vue CLI 并创建项目 确保已安装 Vue…

vue最佳实现

vue最佳实现

Vue 最佳实践 组件设计 组件应遵循单一职责原则,每个组件只负责一个功能模块。命名采用 PascalCase(如 UserProfile.vue),模板中使用 kebab-case(如 <us…