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

父组件调用方式:

vue实现表单分组

<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 使用:

vue实现表单分组

<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 实现分组布局:

.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实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click=…

vue scrolltop 实现

vue scrolltop 实现

实现 Vue 中的 scrollTop 在 Vue 中实现滚动到顶部功能可以通过多种方式完成,包括使用原生 JavaScript、Vue 指令或第三方库。以下是几种常见的实现方法: 使用原生 Jav…

vue实现伸缩

vue实现伸缩

Vue实现伸缩功能的方法 使用CSS过渡和Vue的v-if或v-show 通过CSS的transition属性结合Vue的条件渲染指令(v-if或v-show)可以实现元素的伸缩效果。定义一个CSS类…

vue实现checkbox

vue实现checkbox

Vue 实现 Checkbox 在 Vue 中实现 Checkbox 可以通过原生 HTML 的 <input type="checkbox"> 或使用 Vue 的 v-model 指令绑…

vue系统实现

vue系统实现

Vue 系统实现的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装核心依赖(如 Vue 3、Vue Router、Pinia)。配置开发环境(如 ESLint、Prett…

vue实现spa

vue实现spa

Vue 实现 SPA(单页应用)的步骤 创建 Vue 项目 使用 Vue CLI 快速初始化一个 Vue 项目,确保安装了 Vue Router 作为路由管理工具。运行以下命令创建项目: vue c…