vue进阶——动态引入组件

news/2025/2/13 5:57:26/

vue进阶——动态引入组件

根据 Vuex 存储中的 selectedMapComponent 动态计算组件路径,并在组件创建时和 selectedMapComponent 变化时加载对应的动态组件。

运行逻辑如下:

  1. 引入 Vue 3 的相关函数和 Vuex 中的 useStore 函数,以及组件需要使用的依赖库。

  2. 使用 useStore 函数获取 Vuex 的 store 对象。

  3. 利用 computed 函数创建一个计算属性 selectedMapComponent,它根据 Vuex 中的 selectedMapComponent 的值动态构建组件路径。这个计算属性使用 import() 函数返回一个 Promise,该 Promise 用于异步加载对应的组件,如果加载失败,则捕获错误并返回 null。

  4. 创建一个响应式变量 dynamicComponent 用于存储动态加载的组件。

  5. 定义 loadDynamicComponent 函数,该函数通过 await 等待 selectedMapComponent 的 Promise 解析,并将动态加载的组件赋值给 dynamicComponent。

  6. 使用 watch 函数监听 Vuex 中 selectedMapComponent 的变化,当发生变化时,调用 loadDynamicComponent 函数重新加载动态组件。设置 { immediate: true } 选项,确保在组件初始化时也会立即调用一次。

  7. 在组件创建时,调用 onMounted 钩子,执行 loadDynamicComponent 函数,以确保初始时动态组件的加载。

<template><component :is="dynamicComponent" />
</template><script setup>
import { ref, onMounted, computed, watch } from 'vue';
import { useStore } from 'vuex';const store = useStore();// 计算属性,根据 store 中的 selectedMapComponent 动态计算组件路径
const selectedMapComponent = computed(() => {// 获取 selectedMapComponent 的值const mapType = store.state.selectedMapComponent;// 构建组件路径const componentPath = `./city/${mapType}.vue`;// 使用 import() 返回一个 Promise,加载组件return import(componentPath).catch((error) => {// 处理加载错误,打印错误信息并返回 nullconsole.error('Error loading component:', error);return null;});
});// 动态组件的引用
const dynamicComponent = ref(null);const loadDynamicComponent = async () => {try {const module = await selectedMapComponent.value;dynamicComponent.value = module.default;} catch (error) {console.error('Error loading component:', error);}
};// 使用 watch 监听 selectedMapComponent 的变化
watch(() => store.state.selectedMapComponent, loadDynamicComponent, { immediate: true });onMounted(() => {loadDynamicComponent();
});
</script>

http://www.ppmy.cn/news/1381347.html

相关文章

Dutree:Linux 文件系统磁盘使用追踪工具

在 Linux 系统中&#xff0c;对文件系统的磁盘使用情况进行跟踪和管理是至关重要的。dutree 是一个功能强大的工具&#xff0c;它能够以可视化的方式展示文件系统中的目录和文件的大小&#xff0c;帮助用户更好地了解磁盘空间的使用情况。本文将介绍 dutree 工具的使用方法、功…

蓝桥杯历年真题省赛之 2016年 第七届 生日蜡烛

一、题目 生日蜡烛 某君从某年开始每年都举办一次生日party&#xff0c;并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来&#xff0c;他一共吹熄了236根蜡烛。 请问&#xff0c;他从多少岁开始过生日party的&#xff1f; 请填写他开始过生日party的年龄数。 注意&…

网络安全攻击数据的多维度可视化分析

简介 本研究项目通过应用多种数据处理与可视化技术&#xff0c;对网络安全攻击事件数据集进行了深度分析。首先&#xff0c;利用Pandas库读取并预处理数据&#xff0c;包括检查缺失值、剔除冗余信息以及将时间戳转化为日期时间格式以利于后续时间序列分析。 研究步骤 数据分析…

vite ssr服务端渲染

阅读 Vue文档 这一章里有说过&#xff0c;vue是支持服务端渲染的。 通过createSSRApp创建vue组件实例&#xff0c;并使用renderToString将在服务器渲染好template并返回字符串结构&#xff0c;通过替换占位字符将渲染好的字符串输出到html上&#xff0c;这样的一个过程就实现了…

4款好用的AI写作软件推荐,让你成为写作大神

写作已经成为我们日常生活和工作中必不可少的一部分&#xff0c;当我们在还绞尽脑汁的去想如何写作的时候&#xff0c;别人已经弯道超车用上了人工智能写作软件&#xff0c;今天&#xff0c;小编想为大家推荐4款好用的AI写作软件&#xff0c;让你在几秒钟内生成高质量文章的同时…

Mock.js 基本语法与应用笔记

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

浅谈js的深拷贝与浅拷贝

深拷贝与浅拷贝的示意图&#xff1a; 浅拷贝是把对象拷贝给一个新的对象&#xff0c;只复制指向某个对象的指针&#xff0c;不复制对象本身。如果拷贝对象是基本数据类型&#xff0c;则拷贝的是值&#xff1b;如果拷贝对象是引用类型的&#xff0c;则复制的是地址&#xff0c;修…

K 近邻算法

为什么学习KNN算法 KNN是监督学习分类算法&#xff0c;主要解决现实生活中分类问题。 &#xff08;1&#xff09;首先准备数据&#xff0c;可以是视频、音频、文本、图片等等 &#xff08;2&#xff09;抽取所需要的一些列特征&#xff0c;形成特征向量 &#xff08;3&…