vue 动态组件 render/jsx

需求

根据用户需求设定的动态呈现表单内容

刚开始 打算使用v-html使用,但是v-html 无法渲染组件,只能显示原生的dom,操作起来实在是不方便。查阅了之后,发现可以用render或者jsx实现【为了能作为Vue模板解析】。于是乎开启了我render之旅~

使用

<template-content :html="item.divInner" :value="item.defaultValue" :r="item.r" :c="item.c" @checkClick="checkClick"></template-content>
// 自定义了一个组件
/*this.html=
<CheckboxGroup>
    <Checkbox label="香蕉"></Checkbox>
    <Checkbox label="苹果"></Checkbox>
    <Checkbox label="西瓜"></Checkbox>
</CheckboxGroup>*/
components: {
	"template-content": {
	    // 父组件向子组件传值
		props: { html: String, value: null, r: Number, c: Number },
		render: function (h) {
		   //动态绑定的dom组件
			const com = Vue.extend({
				template: `${this.html}`,
			});
			return h(com, {
			    //dom组件发生点击事件,触发父组件方法checkClick(r,c目的是锁定哪个单元格)
				nativeOn: {
					input: (e) => {
					   // e.target.value 获取此值
						this.$emit("checkClick", e, this.r, this.c);
					},
				},
			});
		},
	},
},

为什么没有使用on 而是使用了nativeOn,首先on这个方法并不能触发,需要使用原生事件。(可能是因为这个组件中并没有click事件)

具体内容可以查看 此链接的深入对象这一部分,有具体的参数讲解

在这里插入图片描述

点击事件实现加粗样式后,就开始想如何进行数据双向绑定
在这里插入图片描述
可是如何自己实现双向绑定,我用的是组件,并不是像官网一样 createElement,使用domProps中设定value时并没有赋初始值。
后来各种翻阅,也是没有找到可解之法。于是乎 我放弃了~
百度的博客,分享一下:
博客1
博客2

最终 在表格里面用类型判断 动态显示了组件…(虽然不高级,但好用啊。。。)
在这里插入图片描述

最后的最后 分享一个我的报错
You are using the runtime-only build of Vue where the template compiler is not ava...
是因为 :vue有两种形式的代码
分别是compiler(模板)模式和runtime模式(运行时)。
默认是compiler,开启runtime模式即可
解决方案:【记得重启
在这里插入图片描述
最后的最后的最后
要是有大佬会render的双向绑定,恳请留在评论区,感谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值