最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue無法對(duì)iframe進(jìn)行緩存的解決方案

 更新時(shí)間:2024年12月25日 08:42:20   作者:夏葵  
項(xiàng)目采用的若依框架,但系統(tǒng)中會(huì)嵌入大屏、報(bào)表頁面,是使用iframe來實(shí)現(xiàn)的,若依框架的菜單管理中提供了緩存功能,是使用keep-alive實(shí)現(xiàn)的,但對(duì)于iframe頁面并不生效,所以本文介紹了關(guān)于Vue無法對(duì)iframe進(jìn)行緩存的解決方案記錄,需要的朋友可以參考下

項(xiàng)目背景

項(xiàng)目采用的若依框架,但系統(tǒng)中會(huì)嵌入大屏、報(bào)表頁面,是使用iframe來實(shí)現(xiàn)的。

若依框架的菜單管理中提供了緩存功能,是使用keep-alive實(shí)現(xiàn)的,但對(duì)于iframe頁面并不生效,由于大屏頁面加載本來就較慢,當(dāng)用戶切換tab頁時(shí),iframe要重載并且無法記錄之前的操作內(nèi)容,這非常影響用戶體驗(yàn)。

keep-alive

keep-alive的緩存原理,其實(shí)是緩存的vnode,它的本質(zhì)就是js對(duì)象,是一串?dāng)?shù)據(jù),而對(duì)于iframe,緩存到的只有一個(gè)url,無法知悉其內(nèi)部的結(jié)構(gòu)與數(shù)據(jù),因此無法進(jìn)行緩存。

解決思路

繞開路由管理,在最外層文件(App.vue)中實(shí)現(xiàn)iframe動(dòng)態(tài)加載,并搭配v-show控制iframe顯示/隱藏。相當(dāng)于通過定位,將一個(gè)獨(dú)立的iframe頁面覆蓋在原有頁面的最上方,

具體實(shí)現(xiàn)

  • 配置菜單時(shí),將含有iframe的頁面多加一個(gè)配置參數(shù) isIframe:true,用于前端區(qū)分

  • store中存儲(chǔ):緩存的iframe信息{path,url}數(shù)組,菜單欄狀態(tài)(根據(jù)菜單展開折疊狀態(tài)來確定iframe的寬度)

const useIframesStore = defineStore(
    'iframes',
    {
      state: () => ({
        cacheIframes: [],
      }),
      actions: {
        addIframe(iframe) {
            this.cacheIframes.push(iframe)
        },
        delIframe(path) {
          this.cacheIframes = this.cacheIframes.filter(item => item.path !== path)
        },
        clearCache() {
          this.cacheIframes = []
        }
      }
    }
)
  • App.vue:v-for加載store中的已緩存的iframe信息,v-show的控制條件為比對(duì)當(dāng)前路由的path于iframe的path是否一致。
  • 樣式問題:因?yàn)閕frame組件不在router-view內(nèi),那么它和菜單是毫無關(guān)聯(lián)的,需要獨(dú)立設(shè)置其樣式;為了正常顯示效果,采用絕對(duì)定位的方式將它懸浮在正常頁面的位置;width需要根據(jù)store中存儲(chǔ)的菜單狀態(tài)去顯示對(duì)應(yīng)的寬度
<template>
  <router-view/>

  <!-- iframe頁 -->
  <div v-if="route.path!=='/login'" :class="`iframes w-menu${sidebar.opened?'1':'0'}`" :style="`height:${iframeHeight};z-index:${route.query.isIframe?'999':'-999'}`">
    <Iframe v-for="i in cacheIframes" :key="i.path" :src="i.url" v-show="route.path === i.path" title="iframe"></Iframe>
  </div>
</template>
...
<style lang="scss" scoped>
.w-menu1{
  width: calc(100% - #{$base-sidebar-width});
}
.w-menu0{
  width: calc(100% - 54px);
}
</style>
  • 路由守衛(wèi)beforeEach:跳轉(zhuǎn)路由時(shí),根據(jù)路由參數(shù)isIframe為true時(shí),表示即將跳轉(zhuǎn)到iframe頁面,調(diào)用store的方法往iframe數(shù)組中添加iframe信息
router.beforeEach((to, from, next) => {
  const iframesStore = useIframesStore();
  // 跳轉(zhuǎn)iframe頁
  if(to.query.isIframe){
    if(iframesStore.cacheIframes.filter(item => item.path === to.path).length==0){
      // 添加緩存
      iframesStore.addIframe({
        path: to.path,
        url: to.query.iframeUrl
      })
    }
  }
  next();
})
  • 關(guān)閉tab簽時(shí):刪除store中對(duì)應(yīng)的iframe項(xiàng)
function closeSelectedTag(view) {
  if(view.query.isIframe){
    iframesStore.delIframe(view.path);
  }
  ...
}
  • 用戶退出登錄后,清空緩存
...
logOut() {
    return new Promise((resolve, reject) => {
      logout(this.token).then(() => {
        this.token = ''
        this.roles = []
        this.permissions = []
        removeToken()
        // 清空緩存
        useIframesStore().clearCache()
        resolve()
      }).catch(error => {
        reject(error)
      })
    })
}
  • 在若依菜單管理中將iframe頁面,使用參數(shù)isIframe控制,而對(duì)應(yīng)的組件頁面設(shè)置為一個(gè)空白頁,以避免同時(shí)加載兩個(gè)iframe占用資源。

到此這篇關(guān)于Vue無法對(duì)iframe進(jìn)行緩存的解決方案的文章就介紹到這了,更多相關(guān)Vue iframe無法緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue3源碼分析reactivity實(shí)現(xiàn)方法示例

    Vue3源碼分析reactivity實(shí)現(xiàn)方法示例

    這篇文章主要為大家介紹了Vue3源碼分析reactivity實(shí)現(xiàn)方法原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • vue中的自定義屬性并獲得屬性的值方式

    vue中的自定義屬性并獲得屬性的值方式

    這篇文章主要介紹了vue中的自定義屬性并獲得屬性的值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue項(xiàng)目如何打包成移動(dòng)端APP

    Vue項(xiàng)目如何打包成移動(dòng)端APP

    這篇文章主要介紹了Vue項(xiàng)目如何打包成移動(dòng)端APP,本文通過圖文示例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12
  • vue3過渡動(dòng)畫的詳解

    vue3過渡動(dòng)畫的詳解

    這篇文章主要為大家詳細(xì)介紹了vue3過渡動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • QT和vue交互的實(shí)現(xiàn)示例

    QT和vue交互的實(shí)現(xiàn)示例

    本文主要介紹了QT和vue交互的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • vue2?利用echarts?單獨(dú)繪制省份的步驟

    vue2?利用echarts?單獨(dú)繪制省份的步驟

    這篇文章主要介紹了vue2?利用echarts?單獨(dú)繪制省份,首先引入所需要的第三方模塊,通過示例代碼給大家介紹的非常詳細(xì),文章末尾給大家補(bǔ)充介紹了vue2.x結(jié)合echarts2實(shí)現(xiàn)顯示具體省份熱力圖的問題,需要的朋友可以參考下
    2022-01-01
  • 詳解vuex狀態(tài)管理模式

    詳解vuex狀態(tài)管理模式

    這篇文章主要介紹了詳解vuex狀態(tài)管理模式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vue3的組合式API中使用ref()函數(shù)的例子

    Vue3的組合式API中使用ref()函數(shù)的例子

    你們是否聽說過Vue3的組合式API?它可是Vue3的新玩法,把以前的Vue2組件函數(shù)轉(zhuǎn)化為了函數(shù)組件。好了,今天我要和大家分享的是如何在組合式API中使用ref()函數(shù),感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • 詳解vue中組件參數(shù)

    詳解vue中組件參數(shù)

    這篇文章主要介紹了vue中組件參數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • 解決vue頁面刷新,數(shù)據(jù)丟失的問題

    解決vue頁面刷新,數(shù)據(jù)丟失的問題

    這篇文章主要介紹了解決vue頁面刷新,數(shù)據(jù)丟失的問題,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論

宜阳县| 长阳| 会昌县| 罗田县| 秭归县| 杨浦区| 高安市| 习水县| 金乡县| 全南县| 盈江县| 孝义市| 朝阳区| 淮南市| 仪陇县| 个旧市| 永春县| 沈丘县| 安龙县| 白河县| 陇南市| 亳州市| 垣曲县| 江都市| 宜君县| 绍兴县| 北宁市| 类乌齐县| 新蔡县| 临漳县| 金湖县| 武乡县| 库伦旗| 普兰县| 蚌埠市| 新安县| 郓城县| 宜都市| 龙川县| 洛浦县| 乌拉特中旗|