当前位置:首页 > VUE

vue实现groupbox

2026-01-07 21:32:01VUE

Vue 实现 GroupBox 组件

在 Vue 中实现类似 GroupBox 的效果可以通过自定义组件完成。GroupBox 通常是一个带有标题的边框容器,用于将相关控件分组显示。

基本实现方法

创建一个名为 GroupBox.vue 的单文件组件:

<template>
  <div class="group-box">
    <div class="group-box-header">
      <slot name="header">{{ title }}</slot>
    </div>
    <div class="group-box-content">
      <slot></slot>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    title: {
      type: String,
      default: ''
    }
  }
}
</script>

<style scoped>
.group-box {
  border: 1px solid #ddd;
  border-radius: 4px;
  margin: 10px 0;
  padding: 10px;
}

.group-box-header {
  font-weight: bold;
  margin-bottom: 8px;
  padding-bottom: 4px;
  border-bottom: 1px solid #eee;
}

.group-box-content {
  padding: 5px;
}
</style>

使用插槽的灵活实现

为了更灵活地控制标题和内容,可以使用具名插槽:

vue实现groupbox

<template>
  <div class="group-box">
    <div class="group-box-header">
      <slot name="header"></slot>
    </div>
    <div class="group-box-content">
      <slot></slot>
    </div>
  </div>
</template>

使用时可以这样:

<GroupBox>
  <template v-slot:header>
    <h3>自定义标题</h3>
  </template>

  这里是内容区域
</GroupBox>

可折叠的 GroupBox

要实现可折叠/展开的功能,可以添加状态管理:

vue实现groupbox

<template>
  <div class="group-box">
    <div 
      class="group-box-header" 
      @click="isCollapsed = !isCollapsed"
    >
      <slot name="header">{{ title }}</slot>
      <span class="toggle-icon">
        {{ isCollapsed ? '+' : '-' }}
      </span>
    </div>
    <div 
      class="group-box-content" 
      v-show="!isCollapsed"
    >
      <slot></slot>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    title: String
  },
  data() {
    return {
      isCollapsed: false
    }
  }
}
</script>

<style scoped>
.group-box-header {
  cursor: pointer;
  display: flex;
  justify-content: space-between;
}
</style>

使用第三方 UI 库

如果项目中使用 Element UI 等第三方库,可以直接使用其提供的 Panel 或 Collapse 组件:

<template>
  <el-collapse v-model="activeNames">
    <el-collapse-item title="分组标题" name="1">
      分组内容
    </el-collapse-item>
  </el-collapse>
</template>

<script>
export default {
  data() {
    return {
      activeNames: ['1']
    }
  }
}
</script>

样式定制建议

可以通过 CSS 变量或 props 实现主题定制:

<template>
  <div 
    class="group-box" 
    :style="{
      '--border-color': borderColor,
      '--header-bg': headerBackground
    }"
  >
    <!-- 内容 -->
  </div>
</template>

<script>
export default {
  props: {
    borderColor: {
      type: String,
      default: '#ddd'
    },
    headerBackground: {
      type: String,
      default: '#f5f5f5'
    }
  }
}
</script>

<style scoped>
.group-box {
  border: 1px solid var(--border-color);
}

.group-box-header {
  background-color: var(--header-bg);
}
</style>

标签: vuegroupbox
分享给朋友:

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed:…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm insta…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-fo…

vue实现多选题

vue实现多选题

Vue实现多选题的方法 使用Vue实现多选题功能,可以通过v-model绑定数组、动态渲染选项、以及处理选中状态来实现。以下是一个完整的实现示例: 基础实现代码 <template>…

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &…

vue实现用户信息表

vue实现用户信息表

Vue 实现用户信息表的方法 使用 Vue CLI 创建项目 安装 Vue CLI 并初始化项目: npm install -g @vue/cli vue create user-info-tab…