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

vue实现autocomplete

Vue 实现 Autocomplete 功能 Vue 中实现 Autocomplete(自动完成)功能可以通过自定义组件或使用现有库完成。以下是几种常见方法: 方法一:使用 Vue 原生实现 创建…

vue实现同步

vue实现同步

Vue 实现同步的方法 在 Vue 中实现同步操作通常涉及数据绑定、状态管理和异步操作的处理。以下是几种常见的方法: 使用计算属性(Computed Properties) 计算属性基于响应式依赖…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 do…

vue实现 单选

vue实现 单选

实现 Vue 单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 可以轻松实现单选功能,将单选按钮的值绑定到…

vue filter 实现

vue filter 实现

在 Vue.js 中,过滤器(Filter)是一种用于文本格式化的功能,可以在模板中直接使用。以下是实现过滤器的详细方法: 全局过滤器注册 通过 Vue.filter 方法注册全局过滤器,可在所有组…

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简…