Vue3如何對(duì)內(nèi)嵌Iframe組件進(jìn)行緩存
1:應(yīng)用場(chǎng)景
對(duì)于系統(tǒng)內(nèi)所有內(nèi)嵌iframe 的頁(yè)面均通過同一個(gè)路由'/iframe', 在router.query內(nèi)傳入不同src 參數(shù),在同一組件內(nèi)顯示iframe 內(nèi)嵌頁(yè)面,對(duì)這些頁(yè)面分別進(jìn)行緩存。
主要是通過v-show 控制顯示隱藏從而達(dá)到iframe 緩存邏輯
2:路由文件配置 router/index.ts
{ name: 'iframe', path: '/iframe', component: Iframe, },
3:修改home.vue 文件
3.1 增加變量判斷是否先死iframe 組件
// 根據(jù)路由判斷是否顯示Iframe 組件 const iframeShow = computed(() => route.value?.path.indexOf('/iframe') === 0);
3.2 在state 中添加響應(yīng)式數(shù)據(jù)
wrapperMap, iframeComList
const state = reactive({ // 保存相同iframe 組件修改之后的組件名稱同iframe套殼組件的映射關(guān)系 wrapperMap: new Map(), // wrapperMap 轉(zhuǎn)換成的數(shù)組,循環(huán)遍歷生成iframe組件 iframeComList: [] as any, });
3.3 對(duì)同一iframe
路由傳入不同參數(shù)的組件套殼修改name 進(jìn)行緩存
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 監(jiān)聽路由
/** * 監(jiān)聽路由生成新的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, }, );
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue-router history模式下的微信分享小結(jié)
本篇文章主要介紹了vue-router history模式下的微信分享小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07使用Bootrap和Vue實(shí)現(xiàn)仿百度搜索功能
這篇文章主要介紹了使用Bootrap和Vue實(shí)現(xiàn)仿百度搜索功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-10-10vue使用js-audio-recorder實(shí)現(xiàn)錄音功能
這篇文章主要為大家詳細(xì)介紹了vue如何使用js-audio-recorder實(shí)現(xiàn)錄音功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12Vue項(xiàng)目中CSS?Modules和Scoped?CSS的介紹與區(qū)別
在vue中我們有兩種方式可以定義css作用域,一種是scoped,另一種就是css modules,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中CSS?Modules和Scoped?CSS的相關(guān)資料,需要的朋友可以參考下2022-03-03vuex中...mapstate和...mapgetters的區(qū)別及說明
這篇文章主要介紹了vuex中...mapstate和...mapgetters的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue css 引入asstes中的圖片無法顯示的四種解決方法
這篇文章主要介紹了vue css 引入asstes中的圖片 無法顯示的幾種解決方案,本文給出了四種解決方法,每種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03vue-cli 打包使用history模式的后端配置實(shí)例
今天小編就為大家分享一篇vue-cli 打包使用history模式的后端配置實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09如何使用Vue3的onMounted鉤子函數(shù)及vue3中onMounted的用法詳解
本文詳細(xì)介紹了Vue3中的`onMounted`鉤子函數(shù)的前世今生,包括其在Vue2中的前身`mounted`鉤子,以及Vue3中使用Composition?API的`onMounted`鉤子的用法,文章涵蓋了`onMounted`的多種用法,感興趣的朋友跟隨小編一起看看吧2024-11-11vue-router動(dòng)態(tài)路由實(shí)現(xiàn)前端權(quán)限管理方式
這篇文章主要介紹了vue-router動(dòng)態(tài)路由實(shí)現(xiàn)前端權(quán)限管理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10Vue.js桌面端自定義滾動(dòng)條組件之美化滾動(dòng)條VScroll
這篇文章主要給大家介紹了關(guān)于Vue.js桌面端自定義滾動(dòng)條組件之美化滾動(dòng)條VScroll的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12