当前位置: 首页 > wzjs >正文

保定专业做网站软文推广页面

保定专业做网站,软文推广页面,有没有做语文题的网站,龙岗网站建设需要考量些什么文章目录 🧩 Vue 3 实现动态加载子组件并缓存状态完整指南💡 需求背景🎯 最终实现效果效果图 🛠️ 技术栈🧱 文件结构示例🔧 实现流程详解1. 定义组件映射关系2. 子组件定义并暴露方法3. 父组件逻辑处理✅ …

文章目录

  • 🧩 Vue 3 实现动态加载子组件并缓存状态完整指南
    • 💡 需求背景
    • 🎯 最终实现效果
      • 效果图
    • 🛠️ 技术栈
    • 🧱 文件结构示例
    • 🔧 实现流程详解
      • 1. 定义组件映射关系
      • 2. 子组件定义并暴露方法
      • 3. 父组件逻辑处理
        • ✅ 使用 `<keep-alive>` 缓存组件
        • ✅ 组件加载和卸载控制
        • ✅ 加载组件并设置参数
        • ✅ 调用所有子组件的 `save()` 方法
    • 🧪 示例截图(文字模拟)
    • 📌 关键知识点总结
    • 🧩 可选扩展建议
    • 📝 结语


🧩 Vue 3 实现动态加载子组件并缓存状态完整指南

💡 需求背景

在开发大型管理系统或低代码平台时,常常会遇到如下需求:

  • 页面左侧是一个树形结构菜单(如组织架构、模块配置等)
  • 用户点击某个节点后,在右侧内容区域加载一个对应的子组件
  • 每个子组件名称不同,功能也不同
  • 子组件需要接收参数(如订单号 orderId
  • 父组件需要调用子组件的统一方法(如 save(orderId)
  • 支持多选节点,每个选中的节点都加载一个子组件到内容区
  • 已加载的子组件需要缓存状态(如表单输入、请求数据),避免重复加载

🎯 最终实现效果

  • 树形菜单支持多选
  • 每个选中节点对应一个子组件,展示在内容区域
  • 子组件可接收参数(如 orderId
  • 父组件可通过 ref 调用子组件的方法(如 save()
  • 所有已加载的子组件都会被缓存,切换时不丢失状态
  • 可以一键保存所有子组件的数据

效果图

效果图


🛠️ 技术栈

  • Vue 3(Composition API)
  • <component is>:动态渲染组件
  • defineAsyncComponent:按需异步加载组件
  • <KeepAlive>:缓存组件状态
  • defineExpose:暴露子组件方法供父组件调用
  • ref 数组:管理多个子组件实例引用

🧱 文件结构示例

src/
├── components/
│   ├── PageA.vue
│   ├── PageB.vue
│   └── PageC.vue
├── views/
│   └── HomeView.vue
├── utils/
│   └── componentMap.js
└── App.vue

🔧 实现流程详解

1. 定义组件映射关系

// componentMap.js
export const componentMap = {'node1': 'PageA','node2': 'PageB','node3': 'PageC'
}

2. 子组件定义并暴露方法

<!-- PageA.vue -->
<script setup>
import { defineProps } from 'vue'const props = defineProps({orderId: String
})const save = (orderId) => {console.log('保存订单号:', orderId)
}defineExpose({ save })
</script><template><div>当前订单号:{{ orderId }}</div>
</template>

其他组件类似。


3. 父组件逻辑处理

✅ 使用 <keep-alive> 缓存组件
<keep-alive><component:is="item.component":ref="(el) => setComponentRef(el, index)":order-id="item.orderId"/>
</keep-alive>
✅ 组件加载和卸载控制
function toggleSelection(node) {const index = selectedNodes.value.findIndex(n => n.id === node.id)if (index === -1) {selectedNodes.value.push(node)loadComponent(node)} else {selectedNodes.value.splice(index, 1)removeComponent(node)}
}
✅ 加载组件并设置参数
function loadComponent(node) {const componentName = componentMap[node.id]if (components[componentName]) {loadedComponents.value.push({id: node.id,label: node.label,component: defineAsyncComponent(components[componentName]),orderId: `ORDER_${node.id.toUpperCase()}`})}
}
✅ 调用所有子组件的 save() 方法
async function saveAll() {for (let i = 0; i < componentRefs.value.length; i++) {const comp = componentRefs.value[i]if (comp && comp.save) {await comp.save(loadedComponents.value[i].orderId)}}
}

🧪 示例截图(文字模拟)

区域内容
左侧树多个节点,支持点击选择
右侧内容每个选中节点对应一个子组件,显示订单号
底部按钮“保存全部”按钮,调用所有子组件的 save()

📌 关键知识点总结

功能实现方式
动态加载组件使用 <component is="xxx">
异步加载使用 defineAsyncComponent()
传递参数使用 props
获取组件实例使用 refsetComponentRef()
调用子组件方法使用 ref.value.save()
缓存组件状态使用 <KeepAlive>
生命周期钩子onActivated() / onDeactivated()

🧩 可选扩展建议

  • 添加 Tab 切换面板,使用 v-show 控制显隐
  • 使用 Pinia/Vuex 管理组件状态
  • 使用 TypeScript 定义接口规范
  • 添加“关闭”按钮移除某个缓存组件
  • 支持最大缓存数量限制(自定义 KeepAlive 插件)

📝 结语

通过 Vue 3 提供的强大特性,我们可以轻松实现复杂的动态组件加载、状态缓存和跨层级通信。本文提供了一套完整的解决方案,适用于企业级后台系统、低代码编辑器、配置中心等场景。

如果你正在构建一个多标签页、模块化管理系统的项目,这套方案将非常实用!

http://www.dtcms.com/wzjs/363693.html

相关文章:

  • 汽车手机网站制作seo优化大公司排名
  • discuz论坛网站做的门户衡水seo优化
  • 蚌埠网站关键词优化百度手机助手最新版下载
  • 网站制作简单协议品牌推广内容
  • 德宏网站建设360浏览器网页版入口
  • 自己做网站统计公司主页网站设计
  • 网站单独页面怎么做301重定向优化seo设置
  • 我要学做网站关键词分为哪三类
  • wordpress怎么盈利百度官方优化指南
  • 北京著名网站设计公司市场营销四大分析方法
  • 怎么查询别人的网站是独立ip还是共享ip上海关键词优化的技巧
  • 帮你做决定的网站东莞整站优化排名
  • wordpress设置缓存北京seo公司司
  • 网站制作企优化系统的软件
  • wordpress做新闻网站上海关键词优化排名软件
  • 商业网站开发设计报告seo技术培训广东
  • asp.net c 网站开发网络推广的细节
  • 网站建设便宜苏州百度搜索排名优化
  • 在网络上做兼职的网站做seo要投入什么
  • wordpress开启ssl变慢seo建站是什么意思
  • 海口建设网站的公司互联网营销策划方案
  • 网站的佣金怎么做会计分录西安优化网站公司
  • 网站如何开通微信支付接口免费的拓客平台有哪些
  • 住房和城乡建设部网站bim百度软件应用市场
  • 海原电商网站建设网络舆情监测系统软件
  • 手机网页版传奇关键词优化网站排名
  • 柳州网站建设工作室广告公司业务推广
  • 网站建设域名什么意思百度搜索指数排行榜
  • java网站开发实例下载seo关键词优化排名公司
  • 五合一网站定制搜狗站长工具平台