vue动态组件实现动态表单的方法

本文获取动态列和动态表单的后端使用数据库存储,使用java接口获取代码内容。

后端代码我就不粘贴出来了,就是普通的从数据库中获取代码,获取到的代码例子如下:

已下代码是iview的modal信息

复制代码
    <Modal width="800" v-model="modal" title="新增"  :mask-closable="false" >
        <i-Form :model="saveform" ref="saveform" :rules="ruleValidate" :label-width="100">
        <row>
        <i-col span="12" >
	                <Form-Item label="代码" prop="dm">
		                <i-Input v-model="saveform.dm"></i-Input>
		            </Form-Item>
		</i-col>
		<i-col span="24" >
	                <Form-Item label="名称" prop="mc">
		                <i-Input v-model="saveform.dm"></i-Input>
		            </Form-Item>
        </i-col>
        </row>

        </i-Form>
        <div slot="footer">
            <i-button type="text" @click="modal=false">取消</i-button>
            <i-button type="info" @click="save">保存</i-button>
        </div>
    </Modal>

前端页面中加入自定义组件:

复制代码
    <!-- 动态组件注入 -->
    <component :is="dynamicComponent" :saveform="saveform" ref="dynamicComp"></component>

然后在vue的create生命周期中,加入已下代码,用于注册动态表单:

复制代码
	created: function () {
		let self = this;
		var url = baseUrl + 'xxxxxx';
		let pro = new Promise((resolve, reject) => {
			$.ajax({
				url: url,
				type: 'POST',
				data: {},
				dataType: 'json',
				success: function (res) {
					let nr = res.content.nr;
					try {
						resolve(nr);
					} catch (error) {
						reject(error);
					}
				},
				error: function (err) {
					console.log('err:', err);
					reject(err);
				}
			});
		});
		pro.then(result => {
			console.log('结果:', result);
			// 创建一个动态组件
			const DynamicModal = {
				template: result,
				props: ['saveform'], // 接收父组件传递的数据
				data() {
					return {
						modal: false,
						saveform: {dm:null,mc:null}
					};
				},
				methods: {
					save: function () {
						var self = this;
						console.log('这是保存方法');
					},
				}
			};
			// 在 Vue 实例中注册动态组件
			app.$options.components.DynamicModal_1 = DynamicModal;
			// 在模板中使用动态组件
			self.dynamicComponent = 'DynamicModal_1';

			console.log('结果:self', self);

		}).catch(error => {
			console.log('出错:', error);
		});
	},
相关推荐
Days205016 分钟前
简单处理接口返回400条数据本地数据分页加载
前端
MZ_ZXD00119 分钟前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
Novlan123 分钟前
@tdesign/uniapp 图标瘦身
前端
ManThink Technology27 分钟前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络
铅笔侠_小龙虾40 分钟前
Flutter 实战: 计算器
开发语言·javascript·flutter
大模型玩家七七1 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
. . . . .1 小时前
shadcn组件库
前端
2501_944711431 小时前
JS 对象遍历全解析
开发语言·前端·javascript
发现一只大呆瓜2 小时前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
css趣多多2 小时前
ctx 上下文对象控制新增 / 编辑表单显示隐藏的逻辑
前端