当前位置:首页 > 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>

使用插槽的灵活实现

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

<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

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

<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>

vue实现groupbox

标签: vuegroupbox
分享给朋友:

相关文章

vue实现单页面

vue实现单页面

Vue 实现单页面应用(SPA) Vue.js 是一个渐进式框架,非常适合构建单页面应用(SPA)。SPA 的核心特点是整个应用只有一个 HTML 页面,通过动态加载内容实现页面切换,无需重新加载整个…

vue实现switch

vue实现switch

Vue 实现 Switch 开关组件 在 Vue 中实现 Switch 开关组件可以通过自定义组件或使用现有 UI 库完成。以下是几种常见实现方式: 自定义 Switch 组件 创建一个基础…

vue实现试卷

vue实现试卷

Vue实现试卷系统的基本思路 使用Vue.js构建试卷系统需要结合组件化开发、状态管理和后端数据交互。核心功能包括题目展示、答题逻辑、计时器和提交答案。 核心功能模块划分 试卷组件结构 试卷容…

vue实现ppt

vue实现ppt

Vue 实现 PPT 的功能 Vue 可以结合第三方库或自定义组件实现类似 PPT 的演示效果。以下是几种常见的方法: 使用第三方库 reveal.js reveal.js 是一个流行的演示框架,…

vue实现mui

vue实现mui

使用 Vue 实现 MUI(Material-UI)风格的界面 Vue 本身不直接提供 MUI(Material Design)组件,但可以通过集成第三方库或手动实现来达到类似效果。以下是几种常见方法…

vue实现keepalive

vue实现keepalive

Vue 中实现 keep-alive 在 Vue 中,keep-alive 是一个内置组件,用于缓存动态组件或组件的状态,避免重复渲染和销毁。以下是实现 keep-alive 的几种方法: 基本用…