vue element封装form表单的实现

yizhihongxing

让我们来详细讲解一下“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日

相关文章

  • go grpc安装使用教程

    Go gRPC 安装使用教程 简介 gRPC 是一种高效、强大、轻便的通信框架,用于构建分布式应用程序。使用 gRPC,您可以定义服务并生成有效的客户端和服务器端代码。gRPC 可以在许多语言和平台之间进行通信,包括 Go、Java、C++、Python、Ruby、Node.js 和 PHP 等语言。在本文中,我们将说明如何在 Go 中使用 gRPC。 安装…

    other 2023年6月26日
    00
  • concent渐进式重构react应用使用详解

    Concent渐进式重构React应用使用详解 Concent是一个专为React应用而生的状态管理框架,它提供了一种渐进式的重构方案,能够帮助我们将现有的React应用逐步地迁移到状态管理框架上,提高代码复用性和可维护性。下面详细讲解一下使用Concent进行渐进式重构React应用的攻略。 准备工作 在使用Concent进行渐进式重构React应用之前,…

    other 2023年6月27日
    00
  • c与c++之间的相互调用及函数区别示例详解

    相关基础知识 在介绍 C 和 C++ 之间相互调用的过程之前,需要梳理一下 C 和 C++ 函数的区别。 C 函数和 C++ 函数的定义和调用有以下区别: 函数重载 C++ 支持函数重载,即同名函数的参数个数和类型不同,可以被认为是不同的函数。例如: // C++ 中使用函数重载 int sum(int a, int b) { return a + b; }…

    other 2023年6月26日
    00
  • mysql字符串索引优化方案

    MySQL字符串索引优化方案 在MySQL中,字符串类型字段一般都使用字符集来存储,例如UTF8、GBK、BIG5等。然而,针对这些字符串类型的查询操作,如果没有正确使用索引,会导致查询性能下降严重。本文将介绍MySQL中针对字符串类型字段的索引优化方案。 字符集选择 首先,我们需要选取与实际需求相符合的字符集,并且保证该字符集在MySQL中能够正确存储数据…

    其他 2023年3月29日
    00
  • C++类的特种函数生成机制详解

    C++类的特种函数生成机制详解 什么是特种函数? C++中存在一些与类相关的函数,它们被称为特种函数。这些特种函数包括:构造函数、析构函数、拷贝构造函数、移动构造函数、拷贝赋值函数、移动赋值函数。这些特殊函数被特别定义,用于实现类的构造、销毁、拷贝和移动操作。 特种函数的生成机制 1. 构造函数 构造函数用于类的实例化过程。类中如果没有定义构造函数,则会生成…

    other 2023年6月26日
    00
  • python中proto的repeated

    Python中Proto的Repeated 在Python中使用Proto时,我们可以使用Repeated字段类型来表示重复的数据。以下是Python中Proto的Repeated的完整攻略。 步骤 以下是在Python使用Proto的Repeated的步骤: 定义Proto文件。 使用prot编译Proto文件。 在Python中导入生成的Python文件…

    other 2023年5月6日
    00
  • Python封装解构以及丢弃变量

    Python封装解构以及丢弃变量 在 Python 中,我们可以使用封装和解构的方式对数据进行操作,同时也可以使用丢弃变量的方式来忽略数据中不需要的部分。 封装 封装可以将多个值打包成一个整体,常用的打包方式包括元组和列表。例如,我们可以将多个数值封装在元组中: >>> nums = (1, 2, 3) >>> print…

    other 2023年6月25日
    00
  • 谈一谈html表单标签有什么

    以下是关于“HTML表单标签”的完整攻略,包含两个示例。 HTML表单标签 HTML表单标签用于创建交互式表单,允许用户向Web服务器提交数据。以下是一些常用的HTML表单标签及其用途的详细攻略。 1. \ 标签 \ 标签用于创建HTML表单。它包含一个或多个表单元素,例如输入字段、复选框、单选按钮、下拉列表等。以下是一个示例: <form actio…

    other 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部