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项目中CSS Modules和Scoped CSS的介绍与区别
在vue中我们有两种方式可以定义css作用域,一种是scoped,另一种就是css modules,下面这篇文章主要给大家介绍了关于Vue项目中CSS Modules和Scoped CSS的相关资料,需要的朋友可以参考下2022-03-03
vuex中...mapstate和...mapgetters的区别及说明
这篇文章主要介绍了vuex中...mapstate和...mapgetters的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-08-08
vue css 引入asstes中的图片无法显示的四种解决方法
这篇文章主要介绍了vue css 引入asstes中的图片 无法显示的几种解决方案,本文给出了四种解决方法,每种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-03-03
如何使用Vue3的onMounted钩子函数及vue3中onMounted的用法详解
本文详细介绍了Vue3中的`onMounted`钩子函数的前世今生,包括其在Vue2中的前身`mounted`钩子,以及Vue3中使用Composition API的`onMounted`钩子的用法,文章涵盖了`onMounted`的多种用法,感兴趣的朋友跟随小编一起看看吧2024-11-11
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
这篇文章主要给大家介绍了关于Vue.js桌面端自定义滚动条组件之美化滚动条VScroll的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-12-12


最新评论