设置一个组件用于动态添加删除el-form-item并添加表单验证

设置一个组件用于动态添加删除el-form-item并添加表单验证

效果示例图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

父组件中引入

<template>
	<div class="app-container">
		<dynamicAddItem ref="dynamicAdd"></dynamicAddItem>
		<el-button @click="submitHandleFun">提交</el-button>
	</div>
</template>
<script>
import dynamicAddItem from './dynamicAddItem.vue';
export default {
	components: {
		dynamicAddItem
	},
	data() {
		return {};
	},
	mounted() {},
	methods: {
		submitHandleFun() {
			this.$refs['dynamicAdd'].submitHandle();
			console.log('[]', this.$refs['dynamicAdd'].dynamicValidateForm);
		}
	}
};
</script>

子组件dynamicAddItem.vue

<template>
	<el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px">
		<template v-for="(dynamic, index) in dynamicValidateForm.file">
			<div :key="index">
				<el-form-item :prop="'file.' + index + '.name'" :label="'用户名' + index" :rules="[{ required: true, message: '请输入用户名', trigger: 'blur' }]">
					<el-input v-model="dynamic.name"></el-input>
				</el-form-item>
				<el-form-item :prop="'file.' + index + '.phone'" :label="'手机号' + index" :rules="[{ required: true, message: '请输入手机号', trigger: 'blur' }]">
					<el-input v-model="dynamic.phone"></el-input>
				</el-form-item>
				<el-form-item><el-button @click.prevent="removeDynamic(dynamic)">删除</el-button></el-form-item>
			</div>
		</template>
		<el-form-item><el-button @click="addDynamic">新增</el-button></el-form-item>
	</el-form>
</template>

<script>
export default {
	data() {
		return {
			dynamicValidateForm: {
				file: []
			}
		};
	},
	mounted() {},
	methods: {
		/**
		 * 提交动态表单数据
		 * **/
		submitHandle() {
			this.$refs['dynamicValidateForm'].validate(valid => {
				if (valid) {
					alert('submit!');
				} else {
					console.log('error submit!!');
					return false;
				}
			});
		},
		/**
		 * 删除
		 * **/
		removeDynamic(item) {
			var index = this.dynamicValidateForm.file.indexOf(item);
			if (index !== -1) {
				this.dynamicValidateForm.file.splice(index, 1);
			}
		},
		/**
		 * 新增
		 * **/
		addDynamic() {
			this.dynamicValidateForm.file.push({
				name: '',
				phone: ''
			});
		}
	}
};
</script>

<style lang="scss" scoped></style>

更多详细使用请浏览element ui官网

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`el-form-item` 和 `prop` 都是来自 Element UI 的 Vue.js 组件库,用于构建用户界面。这里,我们讨论的是如何动态地为表单字段添加 `el-form-item` 组件及其对应的属性绑定。 ### **`el-form-item` 组件简介** `el-form-item` 主要用于封装输入字段,并允许你将一些通用的功能如错误信息提示、验证规则等应用到该组件上。它通常包含以下几个关键属性: - `label`:设置输入字段的标题。 - `prop`:绑定数据到 Vue 实例的一个属性名。 - `rules`:定义表单验证规则。 - `modelValue`:绑定数据值,当值变化时触发事件。 ### **动态添加 `el-form-item`** 要在 Vue 应用中动态创建 `el-form-item` 组件并基于某个条件添加它们,你可以利用 Vue 的 `v-for` 指令。假设你有一个数组,其中包含了需要显示的表单项的信息(例如,每个元素可以包括表单标题、关联的属性名称以及是否启用的布尔值),你可以这样做: ```vue <template> <el-form ref="form"> <div v-for="(item, index) in formItems" :key="index"> <!-- 动态生成表单项 --> <el-form-item label=" {{ item.label }}" :prop="item.prop" :rules="item.rules" v-if="item.enabled"> <el-input v-model="formData[item.prop]" placeholder="请输入内容"></el-input> </el-form-item> </div> </el-form> </template> <script> export default { data() { return { formItems: [ { label: '姓名', prop: 'name', enabled: true }, { label: '邮箱', prop: 'email', enabled: false }, // 示例禁用一项 { label: '电话', prop: 'phone', enabled: true } ], formData: { name: '', email: '', phone: '' } }; }, methods: {} } </script> ``` 在这个示例中: 1. `formItems` 数组包含了我们需要动态创建的 `el-form-item` 的配置信息,包括标签文本 (`label`)、属性路径 (`prop`) 和启用状态 (`enabled`)。 2. `v-for` 指令遍历数组,根据 `enabled` 属性值来决定是否渲染每一项。 3. 使用 `:prop` 动态绑定表单字段的数据源,使用 `:rules` 动态绑定验证规则,这些都是标准的 Vue 数据绑定语法。 4. `v-model` 确保输入框的值与数据模型保持同步。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值