当前位置:首页 > 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实现登录功能需要结合前端框架和后端API交互。以下是一个典型的实现方案: 安装必要依赖 确保项目已安装axios用于HTTP请求: npm install a…

vue实现飘窗原理

vue实现飘窗原理

vue实现飘窗原理 飘窗效果通常指在页面上悬浮显示的弹窗或通知,跟随页面滚动或固定在某个位置。Vue实现这一效果主要依赖组件化开发、CSS定位和动态数据绑定。 组件结构设计 创建一个独立的Vue组…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keyword…

vue实现分屏

vue实现分屏

Vue 实现分屏的方法 分屏功能通常用于展示多个独立内容区域,以下是几种常见的实现方式: 使用 CSS Grid 布局 通过 CSS Grid 可以轻松创建分屏布局,在 Vue 组件中直接应用样式:…

vue实现帖子

vue实现帖子

Vue 实现帖子功能 使用 Vue 实现帖子功能需要结合前端框架和后端数据交互,以下是实现的关键步骤和代码示例。 帖子列表展示 创建帖子列表组件,使用 v-for 渲染帖子数据,通过 axios…

vue实现选区

vue实现选区

Vue 实现选区的基本方法 在Vue中实现选区功能通常涉及DOM操作和事件处理。以下是几种常见的方法: 使用原生JavaScript的Selection API 通过window.getSel…