vue element封装form表单的实现

让我们来详细讲解一下“vue element封装form表单的实现”的完整攻略。

确定需求

在封装form表单之前,需要先确定需求,包括要封装的表单项、表单验证方式等。

安装依赖

使用vue element库来构建我们的表单组件,需要先安装它。可以使用以下命令进行安装:

npm install element-ui -S

创建表单组件

在项目中创建一个新的组件,可以命名为FormComponent。然后在组件中引入element-ui库中的FormFormItemInput等组件并使用它们构建表单。

<template>
  <el-form ref="form" :model="form" :rules="rules" label-position="top" size="medium">
    <el-form-item label="姓名" prop="name">
      <el-input v-model="form.name"></el-input>
    </el-form-item>
    <el-form-item label="年龄" prop="age">
      <el-input v-model.number="form.age"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
      <el-button @click="resetForm">重置</el-button>
    </el-form-item>
  </el-form>
</template>
<script>
  export default {
    data() {
      return {
        form: {
          name: '',
          age: ''
        },
        rules: {
          name: [
            { required: true, message: '请输入姓名', trigger: 'blur' }
          ],
          age: [
            { required: true, message: '请输入年龄', trigger: 'blur' },
            { type: 'number', message: '请输入数字格式的年龄', trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm() {
        this.$refs.form.validate(valid => {
          if (valid) {
            console.log('submit form');
          } else {
            console.log('form validation failed');
            return false;
          }
        });
      },
      resetForm() {
        this.$refs.form.resetFields();
      }
    }
  };
</script>

以上代码中,我们引入了el-formel-form-itemel-input等组件来构建表单,设置了表单的基本属性和验证规则,增加了提交和重置方法。

封装表单组件

我们可以将表单组件封装为一个可复用的组件。封装时需要传递两个参数:表单项和验证规则。

<!-- FormComponent.vue -->
<template>
  <el-form ref="form" :model="form" :rules="rules" label-position="top" size="medium">
    <el-form-item v-for="(item, index) in items" :key="item.prop" :label="item.label" :prop="item.prop">
      <el-input v-model="form[item.prop]" :placeholder="item.placeholder"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
      <el-button @click="resetForm">重置</el-button>
    </el-form-item>
  </el-form>
</template>
<script>
  export default {
    props: {
      items: {
        type: Array,
        required: true
      },
      rules: {
        type: Object,
        required: true
      }
    },
    data() {
      return {
        form: {}
      };
    },
    methods: {
      submitForm() {
        this.$refs.form.validate(valid => {
          if (valid) {
            console.log('submit form');
          } else {
            console.log('form validation failed');
            return false;
          }
        });
      },
      resetForm() {
        this.$refs.form.resetFields();
      }
    }
  };
</script>

以上代码中,我们使用了props传递了表单项和验证规则,并使用了v-for指令遍历表单项数组。最终创建了一个可复用的表单组件。

使用封装组件

使用封装的表单组件时,需要在父组件中传递表单项和验证规则。可以使用以下方式:

<template>
  <div>
    <form-component :items="items" :rules="rules"></form-component>
  </div>
</template>
<script>
  import FormComponent from './FormComponent.vue';

  export default {
    components: {
      FormComponent
    },
    data() {
      return {
        items: [
          {
            label: '姓名',
            prop: 'name',
            placeholder: '请输入姓名'
          },
          {
            label: '年龄',
            prop: 'age',
            placeholder: '请输入年龄'
          }
        ],
        rules: {
          name: [
            { required: true, message: '请输入姓名', trigger: 'blur' }
          ],
          age: [
            { required: true, message: '请输入年龄', trigger: 'blur' },
            { type: 'number', message: '请输入数字格式的年龄', trigger: 'blur' }
          ]
        }
      };
    }
  };
</script>

以上代码中,在父组件中引入了封装好的表单组件,并传递了表单项和验证规则。

示例说明

示例一

假设我们需要创建一个登录表单,包括用户名和密码。可以使用以下代码:

<!-- LoginPage.vue -->
<template>
  <div>
    <form-component :items="items" :rules="rules"></form-component>
  </div>
</template>
<script>
  import FormComponent from './FormComponent.vue';

  export default {
    components: {
      FormComponent
    },
    data() {
      return {
        items: [
          {
            label: '用户名',
            prop: 'username',
            placeholder: '请输入用户名'
          },
          {
            label: '密码',
            prop: 'password',
            placeholder: '请输入密码',
            type: 'password'
          }
        ],
        rules: {
          username: [
            { required: true, message: '请输入用户名', trigger: 'blur' }
          ],
          password: [
            { required: true, message: '请输入密码', trigger: 'blur' }
          ]
        }
      };
    }
  };
</script>

示例二

假设我们需要创建一个注册表单,包括用户名、密码、确认密码和邮箱。可以使用以下代码:

<!-- RegisterPage.vue -->
<template>
  <div>
    <form-component :items="items" :rules="rules"></form-component>
  </div>
</template>
<script>
  import FormComponent from './FormComponent.vue';

  export default {
    components: {
      FormComponent
    },
    data() {
      return {
        items: [
          {
            label: '用户名',
            prop: 'username',
            placeholder: '请输入用户名'
          },
          {
            label: '密码',
            prop: 'password',
            placeholder: '请输入密码',
            type: 'password'
          },
          {
            label: '确认密码',
            prop: 'confirmPassword',
            placeholder: '请确认密码',
            type: 'password'
          },
          {
            label: '邮箱',
            prop: 'email',
            placeholder: '请输入邮箱地址'
          }
        ],
        rules: {
          username: [
            { required: true, message: '请输入用户名', trigger: 'blur' },
            { min: 6, max: 20, message: '用户名长度在6到20个字符之间', trigger: 'blur' },
          ],
          password: [
            { required: true, message: '请输入密码', trigger: 'blur' },
            { min: 6, max: 20, message: '密码长度在6到20个字符之间', trigger: 'blur' }
          ],
          confirmPassword: [
            { required: true, message: '请确认密码', trigger: 'blur' },
            { validator: this.validatePassword, trigger: 'blur' }
          ],
          email: [
            { required: true, message: '请输入邮箱地址', trigger: 'blur' },
            { pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/, message: '邮箱格式不正确', trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      validatePassword(rule, value, callback) {
        if (value !== this.form.password) {
          callback(new Error('两次输入的密码不一致'));
        } else {
          callback();
        }
      }
    }
  };
</script>

以上是两条示例说明,可以根据实际需求来修改和调整表单项和验证规则。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue element封装form表单的实现 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 深入遍历二叉树的各种操作详解(非递归遍历)

    深入遍历二叉树的各种操作详解(非递归遍历) 二叉树是计算机编程中使用最广泛的数据结构之一,它的遍历算法是二叉树操作中的重要内容。本文将介绍二叉树的深度遍历操作,包括先序遍历、中序遍历、后序遍历以及层序遍历,并提供非递归遍历的实现方法。 先序遍历 先序遍历的顺序是“根-左-右”,即先访问根节点,然后访问左子树,最后访问右子树。先序遍历适合用于创建一棵与原二叉树…

    other 2023年6月27日
    00
  • fedora 23 lvm2格式 根目录磁盘空间不足 扩容方法

    Fedora 23 LVM2格式根目录磁盘空间不足扩容方法 如果你在使用Fedora 23系统时发现根目录磁盘空间不足,需要进行扩容。本攻略将为你详细介绍如何使用LVM2扩展根目录磁盘空间。 确认LVM2磁盘分区 首先,需要确认系统使用LVM2格式进行分区。在终端中执行以下命令: sudo fdisk -l 该命令将列出系统上所有的磁盘和磁盘分区。如果你看到…

    other 2023年6月27日
    00
  • Java if-else 多重嵌套的优化方式

    Java if-else 多重嵌套的优化方式攻略 在Java中,if-else语句的多重嵌套可能会导致代码可读性差、维护困难等问题。为了优化这种情况,我们可以采取以下策略: 1. 使用早期返回 在多重嵌套的if-else语句中,我们可以通过使用早期返回的方式来减少嵌套层级,提高代码的可读性。早期返回是指在满足某个条件时,直接返回结果或执行特定的逻辑,而不再继…

    other 2023年7月27日
    00
  • Win11用户配置文件怎么设置? win11用户配置文件恢复技巧

    Win11 用户配置文件是储存在用户目录下的隐藏文件夹,其中储存了个性化设置、应用程序配置、文档和其他重要配置信息。在Win11系统中,如果用户配置文件发生问题,可能会导致程序无法启动,系统出现错误等问题。因此,正确地配置和备份用户配置文件非常重要。本文将详细讲解Win11用户配置文件的设置和恢复技巧。 配置Win11用户配置文件 步骤一:显示隐藏文件夹 首…

    other 2023年6月25日
    00
  • 微软Win11 Build 2262x.1537预览版发布(附KB5022910更新内容汇总)

    微软Win11 Build 2262x.1537预览版发布攻略 微软最新发布了Win11 Build 2262x.1537预览版,本攻略将详细介绍如何安装和更新该版本,并附带了KB5022910更新内容的汇总。 步骤1:下载Win11 Build 2262x.1537预览版 首先,你需要下载Win11 Build 2262x.1537预览版的安装文件。你可以…

    other 2023年8月3日
    00
  • vundle简介安装

    Vundle 简介安装 Vundle 是一个 Vim 插件管理器,可以通过它来轻松地安装和升级 Vim 插件。本文将介绍 Vundle 的基本用法。 安装 Vundle 在使用 Vundle 之前,需要先安装 Vundle。可以通过 Git 命令将 Vundle 下载到本地: git clone https://github.com/VundleVim/Vu…

    其他 2023年3月29日
    00
  • Vue自定义指令实现点击右键弹出菜单示例详解

    下面是Vue自定义指令实现点击右键弹出菜单的攻略: 确定需求 我们需要实现的效果是在页面中当用户点击鼠标的右键时,弹出一个自定义的菜单,用户可以在菜单中选择相应的功能。 创建自定义指令 我们可以使用Vue的自定义指令来实现此效果。在我们的Vue实例中,我们可以定义一个名为context-menu的指令,并在它的bind函数中添加监听用户右键点击的事件。具体实…

    other 2023年6月27日
    00
  • ARM Cortex-M 系列 MCU 错误追踪库 心得

    ARM Cortex-M 系列 MCU 错误追踪库 心得 在嵌入式系统开发中,错误和异常处理一直是一个很重要的问题。为了能够更好地解决这些问题,ARM Cortex-M系列MCU错误追踪库就应运而生。在使用ARM Cortex-M系列MCU进行嵌入式开发的过程中,我总结了一些错误追踪库的心得,分享给大家。 1. 基本概述 ARM Cortex-M系列MCU错…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部