vue多个动态表单拆分为组件以便维护案例

父组件内容:

javascript 复制代码
		  <div
            v-for="(item, index) in form.payGiftLevelList"
            :key="item.key"
          >
            <div class="giftLevelWrap">
              <div style="margin-left: -40px">
                <reward-resource-form
                  ref="ActivityResource"
                />
              </div>
            </div>
          </div>
      async getResult() {
        const list = [];
        this.form.payGiftLevelList.map(async (item, index) => {
          const activityResource = this.$refs.ActivityResource[index].getData();
          list.push(activityResource);
        });
        const result = await Promise.all(list);
        console.log(result);
      },
      // 回显表单内容
      this.form.payGiftLevelList.forEach((it, index) => {
        this.$nextTick(() => {
          this.$refs.ActivityResource[index].setData(it);
        });
      });

子组件内容:

javascript 复制代码
<template>
  <el-form
    :model="form"
    :rules="rules"
    :disabled="disabled"
    label-position="left"
    label-width="148px"
    ref="rewardResourceForm"
  >
    <el-form-item
      label=""
      required
    >
    <el-input-number
      v-model="form.useRuleMax"
      style="width: 80px; margin: 0 5px"
      :controls="false"
      :precision="0"
      size="mini"
      :min="1"
      :max="99999999"
      label="请输入购满金额"
    />
    </el-form-item>
    <el-form-item
      :label="actRuleBrand === 1 ? '阶梯权益' : '发放权益'"
      prop="data"
      :required="true"
    >
      <select-gift-checkbox
        v-model="form.data"
        :disabled-types="[]"
        :begin-end-time="beginEndTime"
      />
    </el-form-item>
  </el-form>
</template>

<script>
  export default {
    data() {
      return {
        form: {
          useRuleMax: '',
        },
        rules: {
          useRuleMax: [
            { required: true, message: '请输入购满金额', trigger: 'blur' }
          ],
        }
      };
    },
    methods: {
      getData() {
        return this.$refs.rewardResourceForm.validate().then((r) => {
          const {
            useRule,
            useRuleMax
          } = this.form;
          return {
            useRule,
            useRuleMax
          };
        });
      },
      setData(data) {
        // 转换成可用数组,直接转成一个数组
        const { useRule, useRuleMax, activityPayResDTO } = _.pick(data, [
          'useRule',
          'useRuleMax',
          'activityPayResDTO'
        ]);
        this.form = {
          data: activityPayResDTO,
          useRule,
          useRuleMax
        };
      },
    },
相关推荐
会周易的程序员1 小时前
js-shm: 高性能 Node.js 共享内存模块
开发语言·javascript·c++·node.js·共享内存·shm
带娃的IT创业者2 小时前
重新定义前端构建速度:深度解析 SWC 如何用 Rust 颠覆 JavaScript 工具链
前端·javascript·rust·前端构建·swc
m0_547486662 小时前
《Vue.js + uni-app全栈开发从入门到实践 》全套PPT课件2026版
vue.js·uni-app
新中地GIS开发老师3 小时前
零基础WebGIS开发入门 | GeoJSON数据持久化
前端·javascript·gis·webgis·三维gis开发
blns_yxl3 小时前
正则驱动实时表单验证(HTML+CSS+JS+正则)
javascript·css·html
Quz4 小时前
QML 与 JavaScript 交互方式:内联函数、外部文件、信号槽与工作线程
javascript·qt
达子6664 小时前
第10章_HarmonyOs开发图解 用JS开发UI
vue.js
Allshadow4 小时前
Nest.js - 连接数据库
javascript·nestjs
冰暮流星4 小时前
javascript之date对象
开发语言·javascript·ecmascript
橘子星4 小时前
别光看教程!手把手拆解 React Todo 项目,一文吃透 5 个核心概念
前端·javascript