vue + antd 动态增加表单并进行表单校验

本文介绍如何在Vue.js应用中结合Ant Design库动态创建表单,并详细阐述了进行表单验证的步骤和技巧,帮助开发者实现灵活且强大的前端表单管理功能。
摘要由CSDN通过智能技术生成

在这里插入图片描述

<template>
	<a-modal
		v-model:visible="visible"
		:title="formData.id ? '编辑渠道' : '添加渠道'"
		:width="850"
		:mask-closable="false"
		:destroy-on-close="true"
		@ok="onSubmit"
		@cancel="onClose"
	>
		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
			<a-form-item label="渠道名称" name="name">
				<a-input v-model:value="formData.name" placeholder="请输入渠道名称" allow-clear />
			</a-form-item>
			<a-form-item label="渠道编码" name="code">
				<a-input v-model:value="formData.code" placeholder="请输入渠道编码" allow-clear />
			</a-form-item>
			<a-form-item
				v-for="(item, index) in formData.ipWhite"
				:key="item.key"
				v-bind="index === 0 ? formItemLayout : {}"
				:label="index === 0 ? 'IP白名单(最多添加五个)' : ''"
				:name="['ipWhite', index, 'value']"
				:rules="{
					required: true,
					message: '请输入IP白名单',
					trigger: ['change', 'blur']
				}"
			>
				<div class="w-[100%] flex">
					<a-input v-model:value="item.value" placeholder="请输入IP白名单" class="mr-3" style="width: 95%" />
					<MinusCircleOutlined
						v-if="formData.ipWhite.length > 1"
						class="dynamic-delete-button w-[5%]"
						@click="removeDomain(item)"
					/>
				</div>
			</a-form-item>
			<a-form-item v-bind="formItemLayoutWithOutLabel">
				<a-button type="dashed" :disabled="addState" style="width: 30%" @click="addipWhite">
					<PlusOutlined />
					添加白名单
				</a-button>
			</a-form-item>
	
Vue 2 结合 Ant Design 进行动态表单验证通常涉及到 Vue动态组件、`v-model` 和 Ant Design 的 Form 组件以及自定义校验规则。以下是一个简化的步骤说明: 1. **引入依赖**: 首先,确保已经安装了 Vue、Ant Design(包括 `@ant-design/vue` 包)和其他相关的依赖。 ```bash npm install vue antd axios ``` 2. **动态组件**: 使用 Vue 的 `<component>` 或者 `v-for` 来创建动态加载的表单组件,每个组件都包含一个 `<a-form>` 和相关的验证属性。 ```html <template> <div> <button @click="addForm">新增表单</button> <div v-for="(item, index) in forms" :key="index"> <component :is="item.componentName" :formItem="item.formItem"></component> </div> </div> </template> <script> export default { data() { return { forms: [ { componentName: 'FormItem', formItem: {} }, ], }; }, methods: { addForm() { this.forms.push({ componentName: 'FormItem', formItem: {} }); }, }, }; </script> ``` 3. **`FormItem` 组件**: 创建一个 `FormItem.vue` 文件,包含一个 `<a-form-item>` 并设置 `rules` 属性用于验证。可以使用事件总线或者 prop 将校验状态传递回父组件。 ```html <template> <a-form-item :label="formItem.label" :rules="formItem.rules"> <el-input v-model="formItem.value"></el-input> </a-form-item> </template> <script> export default { props: ['formItem'], watch: { formItem: { handler(newVal, oldVal) { // 更新验证规则并处理值变化 }, deep: true, }, }, }; </script> ``` 4. **自定义校验规则**: 在表单组件内,你可以通过 `rule` 属性提供自定义的验证函数,例如使用 Ant Design 提供的 `async-validator` 插件。 5. **父组件验证管理**: 如果需要统一验证所有表单,可以在父组件中设置一个全局的验证方法,接收所有表单的状态,并触发相应的验证流程。 ```javascript methods: { validateAllForms() { this.forms.forEach(form => { if (form.validate()) { // 表单验证通过,继续下一步操作... } else { // 验证失败,展示错误信息 } }); }, } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值