当前位置:首页 > VUE

vue实现表单分组

2026-02-17 22:59:30VUE

Vue 表单分组实现方法

使用 v-for 动态渲染表单组

通过数组数据结构管理分组,利用 v-for 循环渲染多个表单组:

<template>
  <div v-for="(group, index) in formGroups" :key="index">
    <h3>{{ group.title }}</h3>
    <input v-model="group.fields.name" placeholder="姓名">
    <input v-model="group.fields.email" placeholder="邮箱">
    <button @click="removeGroup(index)">删除组</button>
  </div>
  <button @click="addGroup">添加新组</button>
</template>

<script>
export default {
  data() {
    return {
      formGroups: [
        {
          title: '主要联系人',
          fields: { name: '', email: '' }
        }
      ]
    }
  },
  methods: {
    addGroup() {
      this.formGroups.push({
        title: `分组 ${this.formGroups.length + 1}`,
        fields: { name: '', email: '' }
      })
    },
    removeGroup(index) {
      this.formGroups.splice(index, 1)
    }
  }
}
</script>

使用组件封装表单组

创建可复用的表单组组件实现模块化管理:

<!-- FormGroup.vue -->
<template>
  <div class="form-group">
    <h3>{{ title }}</h3>
    <slot></slot>
  </div>
</template>

<script>
export default {
  props: ['title']
}
</script>

父组件调用方式:

<template>
  <FormGroup title="基本信息">
    <input v-model="user.name">
    <input v-model="user.age">
  </FormGroup>

  <FormGroup title="联系信息">
    <input v-model="user.phone">
    <input v-model="user.address">
  </FormGroup>
</template>

使用 Vuex 管理分组状态

对于复杂应用,可通过 Vuex 集中管理表单组状态:

// store.js
export default new Vuex.Store({
  state: {
    formGroups: [
      {
        id: 1,
        fields: { /* ... */ }
      }
    ]
  },
  mutations: {
    ADD_GROUP(state, payload) {
      state.formGroups.push(payload)
    }
  }
})

组件中通过 mapStatemapMutations 使用:

<template>
  <div v-for="group in formGroups" :key="group.id">
    <!-- 表单内容 -->
  </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex'

export default {
  computed: {
    ...mapState(['formGroups'])
  },
  methods: {
    ...mapMutations(['ADD_GROUP'])
  }
}
</script>

表单验证集成

结合 vee-validate 实现分组验证:

<ValidationObserver v-slot="{ invalid }">
  <div v-for="(group, index) in groups" :key="index">
    <ValidationProvider 
      :name="`name-${index}`" 
      rules="required"
      v-slot="{ errors }">
      <input v-model="group.name">
      <span>{{ errors[0] }}</span>
    </ValidationProvider>
  </div>
  <button :disabled="invalid">提交</button>
</ValidationObserver>

响应式布局优化

通过 CSS Grid 或 Flexbox 实现分组布局:

vue实现表单分组

.form-container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 20px;
}

.form-group {
  border: 1px solid #eee;
  padding: 15px;
  border-radius: 8px;
}

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

相关文章

vue实现CRUD

vue实现CRUD

Vue 实现 CRUD 操作 Vue 提供了响应式数据绑定和组件化开发能力,结合后端 API 可以轻松实现 CRUD(增删改查)功能。以下是基于 Vue 3 和 Axios 的完整实现方案。 安装依…

node vue实现

node vue实现

Node.js 与 Vue.js 实现方案 环境搭建 安装 Node.js(建议 LTS 版本),通过 npm 或 yarn 初始化项目。Vue.js 可通过 Vue CLI 快速搭建: npm…

vue实现拉伸

vue实现拉伸

Vue 实现元素拉伸功能 在Vue中实现元素的拉伸(拖拽调整大小)功能,可以通过监听鼠标事件结合CSS样式来实现。以下是两种常见实现方式: 使用原生事件监听 创建可拉伸的组件需要处理鼠标按下…

vue实现tab功能

vue实现tab功能

Vue 实现 Tab 功能的方法 使用动态组件和 v-if 指令 通过 v-if 或 v-show 控制不同 Tab 内容的显示与隐藏。这种方法适合简单的 Tab 切换需求。 <templat…

实现vue模板解析

实现vue模板解析

Vue 模板解析的基本原理 Vue 的模板解析是将模板字符串转换为渲染函数的过程。核心步骤包括模板编译、AST 生成、优化和代码生成。 模板编译阶段 Vue 使用 vue-template-comp…

vue实现轨迹定位

vue实现轨迹定位

Vue实现轨迹定位的方法 在Vue中实现轨迹定位功能通常需要结合地图API(如高德、百度或Google Maps)和定位API(如HTML5 Geolocation或第三方SDK)。以下是几种常见的方…