核心是用 结合拖拽配置实现动态渲染:拖拽生成结构化配置(组件标识、id、位置、属性),存入响应式数组;通过 v-for 遍历并用 :is 渲染对应组件,v-bind 传入属性;组件需预注册或异步加载;所有配置变更均通过修改数组触发 vue 自动更新。

核心是用 <component :is="xxx"></component> 结合拖拽产生的组件配置数据,把“拖什么、放哪、怎么配”变成可执行的渲染逻辑。
拖拽行为生成结构化配置
用户从组件库拖拽一个“柱状图”到画布,系统不直接插入 DOM,而是记录一条配置项:
- 组件标识(如
"ChartBar") - 唯一 ID(用于后续更新/删除)
- 位置信息(如
row: 1, col: 2或绝对坐标) - 初始属性(如
{ title: "销售额", data: [] })
这些数据统一存入响应式数组(如 canvasComponents),作为整个页面的“蓝图”。
用 :is 渲染真实组件实例
画布区域通过 v-for 遍历配置数组,每个条目用 <component></component> 渲染:
分析 Vue 3 Composition API 使用情况——审计响应式模式、可组合函数设计、ref 与 reactive 的选择、计算属性、watcher 使用及组件……
<component v-for="item in canvasComponents" :key="item.id" :is="item.componentName" v-bind="item.props"></component>
注意两点:
-
:is的值必须是已注册的组件名(Vue 2 支持字符串;Vue 3 要求是组件定义对象或异步 import 函数) -
v-bind="item.props"把配置里的属性一次性传给子组件,避免手动写一堆:title="item.title"
组件注册与按需加载
所有可拖拽组件需提前注册,推荐方式:
- 全局注册基础组件(如按钮、文本块)
- 对重型组件(如地图、富文本)用异步 import,避免首屏加载过重:
componentName: () => import('./components/Map.vue') - 避免用字符串名称直接拼接(易出错且无类型提示),建议用 Map 或对象字典映射名称到组件定义
配置变更实时生效
拖拽排序、属性修改、删除组件等操作,都只改 canvasComponents 数组,Vue 的响应式机制会自动触发重新渲染:
- 排序 → 数组顺序变 →
v-for顺序变 → 组件重排 - 改标题 →
item.props.title变 → 子组件接收新 prop → 视图更新 - 删组件 → 数组长度减 → 对应
<component></component>实例被销毁
不需要手动管理组件实例生命周期,Vue 全程接管。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!









