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日

相关文章

  • win7下修改环境变量PATH的两种方式

    下面是详细的讲解“win7下修改环境变量PATH的两种方式”的完整攻略: 环境变量简介 在讲解修改环境变量的方法之前,我们先简单介绍一下环境变量。环境变量是操作系统提供的一种机制,用来保存用户和系统使用的变量和参数。在 Windows 系统下,环境变量包括系统环境变量和用户环境变量,其中系统环境变量是所有用户都可以使用的变量,用户环境变量只能被该用户和其子进…

    other 2023年6月27日
    00
  • parrotlinux(parrotsecurity)安装

    Parrot Linux安装攻略 Parrot Linux是一款基于Debian的Linux发行版,专注于网络安全和数字取证。本攻略将详细介绍如何安装Parrot Linux。 准备工作 在开始安装之前,我们需要准备以下工具: 一台计算机 一个USB启动盘(至少8GB) Parrot Linux的ISO镜像文件 Rufus或Etcher等工具 步骤 以下是安…

    other 2023年5月9日
    00
  • c中的fseek函数使用

    C中的fseek函数使用 在C语言中,访问文件是很常见的操作,而文件通常是一段连续的字节流。为了向前或向后读取文件的数据,我们就需要通过控制文件的指针来实现了。为了方便管理文件指针,C标准库提供了fseek函数,可以实现文件指针的定位和控制。 fseek函数的语法 fseek函数的语法如下: int fseek(FILE *stream, long int …

    其他 2023年3月29日
    00
  • 怎么修改手机ip地址?手机ip地址更改方法介绍

    怎么修改手机IP地址?手机IP地址更改方法介绍 1. 使用静态IP地址 打开手机的设置菜单。 在设置菜单中,找到并点击“网络设置”或类似选项。 在网络设置中,找到并点击“Wi-Fi”或类似选项。 找到当前连接的Wi-Fi网络,并长按该网络名称,然后选择“修改网络”或类似选项。 在修改网络设置中,找到并点击“高级选项”或类似选项。 在高级选项中,找到并点击“I…

    other 2023年7月30日
    00
  • bouncy castle的配置

    下面是“Bouncy Castle的配置的完整攻略”的详细讲解,包括基本原理、实现方法和两个示例说明。 基本原理 Bouncy Castle是一个开源的Java加密库,提供了许多加密算法和安全协议的实现。在使用Bouncy Castle进行加密和解密操作时,需要进行相应的配置。 实现方法 实现Bouncy Castle的配置的方法如下: 下载Bouncy C…

    other 2023年5月5日
    00
  • 关于cmd:findstr或grep输出到文件

    在Windows系统中,可以使用findstr命令来搜索文本文件中的字符串,并将结果输出到文件中。在Linux和Unix系统中,可以使用grep命令来实现相的功能。以下是关于如何使用findstr或grep命令将搜索结果输出到文件的完攻略: 使用findstr命将搜索结果输出到文件 搜索单个文件并将结果输出到文件 可以使用以下命令搜索单个文件的字符串,并将结…

    other 2023年5月8日
    00
  • vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决

    下面是详细讲解“vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决”的完整攻略。 1. 修改打包后的文件名和地址 1.1 修改文件名 使用 vue-cli 3.0 打包生成的文件名是自动化的,会根据默认的模板来命名,比如 js/chunk-vendors.f8bb20ba.js,如果想要修改这些文件的名字,可以通过配置 output 来…

    other 2023年6月26日
    00
  • css:root选择器

    CSS :root选择器 在CSS中,:root选择器用于选择文档根元素,即HTML文档中的<html>元素。通过使用:root选择器,我们可以方便地定义全局的CSS变量,以便在整个页面中进行使用。 如何使用:root选择器 下面是一个例子,演示如何创建一个全局的CSS变量: :root { –my-color: #ff0000; } 在上面的…

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