Vue3如何对内嵌Iframe组件进行缓存

 更新时间:2025年04月25日 09:00:46   投稿:jingxian  
这篇文章主要介绍了Vue3如何对内嵌Iframe组件进行缓存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1:应用场景

对于系统内所有内嵌iframe 的页面均通过同一个路由'/iframe', 在router.query内传入不同src 参数,在同一组件内显示iframe 内嵌页面,对这些页面分别进行缓存。

主要是通过v-show 控制显示隐藏从而达到iframe 缓存逻辑

2:路由文件配置 router/index.ts

{
name: 'iframe',
path: '/iframe',
component: Iframe,
},

3:修改home.vue 文件

3.1 增加变量判断是否先死iframe 组件

// 根据路由判断是否显示Iframe 组件
const iframeShow = computed(() => route.value?.path.indexOf('/iframe') === 0);

3.2 在state 中添加响应式数据

wrapperMap, iframeComList

const state = reactive({
// 保存相同iframe 组件修改之后的组件名称同iframe套壳组件的映射关系
wrapperMap: new Map(),
// wrapperMap 转换成的数组,循环遍历生成iframe组件
iframeComList: [] as any,
});

3.3 对同一iframe

路由传入不同参数的组件套壳修改name 进行缓存

const wrap = (name:any, query:any, component:any) => {
let wrapper;

const wrapperName = name + '-' + query.catchName;
if (state.wrapperMap.has(wrapperName)) {
wrapper = state.wrapperMap.get(wrapperName);
} else {
wrapper = {
name: wrapperName,

render() {
return h('div', { className: 'vaf-page-wrapper' }, component);
},

};

state.wrapperMap.set(wrapperName, wrapper);
}
return h(wrapper);
};

3.4 在template 部分增加组件

通过v-show 控制ifram 路由缓存的组件是否渲染

<!-- :class="{'content-fill':!showAside}" -->
<router-view v-if="!iframeShow" />
<!-- iframe 组件缓存 -->
<div v-show="iframeShow" class="iframe-container">
<component
:is="h(wrapperMap.get(item[0]))"
v-for="(item) in iframeComList"
v-show="iframeShow && item[0] === (String(route?.name) + '-'+ route.query.VIRTUAL_NAME)"
:key="item[0]"
/>
</div>

3.5 监听路由

/**
* 监听路由生成新的iframe 组件并保存
*/
watch(
() => route,
(newValue, oldValue) => {
if (route.value.path.indexOf('/iframe') === 0) {
wrap(route.value.name, route.value.query, h(Iframe));
nextTick(() => {
state.iframeComList = [...state.wrapperMap];
});
}
},
{
deep: true,
immediate: true,
},
);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue-router history模式下的微信分享小结

    vue-router history模式下的微信分享小结

    本篇文章主要介绍了vue-router history模式下的微信分享小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 使用Bootrap和Vue实现仿百度搜索功能

    使用Bootrap和Vue实现仿百度搜索功能

    这篇文章主要介绍了使用Bootrap和Vue实现仿百度搜索功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-10-10
  • vue使用js-audio-recorder实现录音功能

    vue使用js-audio-recorder实现录音功能

    这篇文章主要为大家详细介绍了vue如何使用js-audio-recorder实现录音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • Vue项目中CSS Modules和Scoped CSS的介绍与区别

    Vue项目中CSS Modules和Scoped CSS的介绍与区别

    在vue中我们有两种方式可以定义css作用域,一种是scoped,另一种就是css modules,下面这篇文章主要给大家介绍了关于Vue项目中CSS Modules和Scoped CSS的相关资料,需要的朋友可以参考下
    2022-03-03
  • vuex中...mapstate和...mapgetters的区别及说明

    vuex中...mapstate和...mapgetters的区别及说明

    这篇文章主要介绍了vuex中...mapstate和...mapgetters的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue css 引入asstes中的图片无法显示的四种解决方法

    vue css 引入asstes中的图片无法显示的四种解决方法

    这篇文章主要介绍了vue css 引入asstes中的图片 无法显示的几种解决方案,本文给出了四种解决方法,每种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • vue-cli 打包使用history模式的后端配置实例

    vue-cli 打包使用history模式的后端配置实例

    今天小编就为大家分享一篇vue-cli 打包使用history模式的后端配置实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 如何使用Vue3的onMounted钩子函数及vue3中onMounted的用法详解

    如何使用Vue3的onMounted钩子函数及vue3中onMounted的用法详解

    本文详细介绍了Vue3中的`onMounted`钩子函数的前世今生,包括其在Vue2中的前身`mounted`钩子,以及Vue3中使用Composition API的`onMounted`钩子的用法,文章涵盖了`onMounted`的多种用法,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • vue-router动态路由实现前端权限管理方式

    vue-router动态路由实现前端权限管理方式

    这篇文章主要介绍了vue-router动态路由实现前端权限管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue.js桌面端自定义滚动条组件之美化滚动条VScroll

    Vue.js桌面端自定义滚动条组件之美化滚动条VScroll

    这篇文章主要给大家介绍了关于Vue.js桌面端自定义滚动条组件之美化滚动条VScroll的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论