Vue3 el-form 二次封装示例

<template>
	<el-form ref="form" :model="props.model" :rules="props.rules" :label-width="props.labelWidth"
		:label-position="`${$store.state.app.device == 'desktop'?'left':'top'}`">
		<el-row>
			<template v-for="citem in proxy.$slots['default']()" :key="citem">
				<el-col :span="12" :xs="24"
					v-if="citem&&(typeof citem.children !== 'string')">
					<template v-if="citem.children">
						<component :is="citem"></component>
					</template>
					<template v-else>
						<component :is="citem"></component>
					</template>
					<!-- <slot></slot> -->
				</el-col>
			</template>
		</el-row>
	</el-form>
</template>

<script setup>
	const {
		proxy
	} = getCurrentInstance(); // 获取实例中的proxy
	console.log(proxy.$slots['default']())
	const props = defineProps({
		model: Object,
		prop: {},
		rules: {},
		labelPosition: {
			type: String,
			values: ["left", "right", "top"],
			default: "right"
		},
		requireAsteriskPosition: {
			type: String,
			values: ["left", "right"],
			default: "left"
		},
		labelWidth: {
			type: [String, Number],
			default: ""
		},
		labelSuffix: {
			type: String,
			default: ""
		},
		inline: Boolean,
		inlineMessage: Boolean,
		statusIcon: Boolean,
		showMessage: {
			type: Boolean,
			default: true
		},
		validateOnRuleChange: {
			type: Boolean,
			default: true
		},
		hideRequiredAsterisk: {
			type: Boolean,
			default: false
		},
		scrollToError: Boolean,
		scrollIntoViewOptions: {
			type: [Object, Boolean]
		}
	});

	const resetFields = () => {
		proxy.$refs["form"].resetFields()
	}

	const validate = (a) => {
		proxy.$refs["form"].validate(a)
	}

	defineExpose({
		resetFields,
		validate,
	});
</script>
``
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值