欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue無法對iframe進行緩存的解決方案

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

項目背景

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

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

keep-alive

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

解決思路

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

具體實現(xiàn)

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

  • store中存儲:緩存的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的控制條件為比對當前路由的path于iframe的path是否一致。
  • 樣式問題:因為iframe組件不在router-view內(nèi),那么它和菜單是毫無關聯(lián)的,需要獨立設置其樣式;為了正常顯示效果,采用絕對定位的方式將它懸浮在正常頁面的位置;width需要根據(jù)store中存儲的菜單狀態(tài)去顯示對應的寬度
<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)路由時,根據(jù)路由參數(shù)isIframe為true時,表示即將跳轉(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();
})
  • 關閉tab簽時:刪除store中對應的iframe項
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控制,而對應的組件頁面設置為一個空白頁,以避免同時加載兩個iframe占用資源。

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

相關文章

  • element?時間選擇器禁用選擇的使用示例

    element?時間選擇器禁用選擇的使用示例

    最近做項目遇到的一個功能,禁止用戶在輸入內(nèi)容的時候選擇今天以前的日期或者包含今日的日期,本文主要介紹了element?時間選擇器禁用選擇的使用示例,感興趣的可以了解一下
    2023-09-09
  • vue使用canvas手寫輸入識別中文

    vue使用canvas手寫輸入識別中文

    這篇文章主要介紹了vue使用canvas手寫輸入識別中文,工作時遇到一些項目如:系統(tǒng)上的輸入法使用不方便,客戶要求做一個嵌入web網(wǎng)頁的手寫輸入法。下面我們來看看文章得具體描述吧
    2021-11-11
  • vuex刷新后數(shù)據(jù)丟失的解決方法

    vuex刷新后數(shù)據(jù)丟失的解決方法

    這篇文章主要給大家介紹了關于vuex刷新后數(shù)據(jù)丟失的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • vue不通過路由直接獲取url中參數(shù)的方法示例

    vue不通過路由直接獲取url中參數(shù)的方法示例

    通過url傳遞參數(shù)是我們在開發(fā)中經(jīng)常用到的一種傳參方法,但通過url傳遞后改如果獲取呢?下面這篇文章主要給大家介紹了關于vue如何不通過路由直接獲取url中參數(shù)的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • vue通過獲取url中的信息登錄頁面的代碼詳解

    vue通過獲取url中的信息登錄頁面的代碼詳解

    這篇文章主要給大家介紹了vue通過獲取url中的信息登錄頁面的方法,文中通過代碼示例給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-02-02
  • 基于vue實現(xiàn)分頁/翻頁組件paginator示例

    基于vue實現(xiàn)分頁/翻頁組件paginator示例

    本篇文章主要介紹了基于vue實現(xiàn)分頁/翻頁組件paginator示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Vue中父子組件如何實現(xiàn)傳值

    Vue中父子組件如何實現(xiàn)傳值

    這篇文章主要介紹了Vue中父子組件如何實現(xiàn)傳值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 關于vue 結(jié)合原生js 解決echarts resize問題

    關于vue 結(jié)合原生js 解決echarts resize問題

    這篇文章主要介紹了關于vue 結(jié)合原生js 解決echarts resize問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 基于Vue3實現(xiàn)SSR(服務端渲染)功能

    基于Vue3實現(xiàn)SSR(服務端渲染)功能

    在現(xiàn)代網(wǎng)頁開發(fā)中,用戶體驗日益成為網(wǎng)站成功的重要因素,從加載時間到SEO優(yōu)化,越來越多的開發(fā)者開始關注使用服務端渲染(SSR)來提升應用的表現(xiàn),本文將深入探討 Vue 3 的 SSR 特性,并以示例代碼展示如何實現(xiàn)這一功能,需要的朋友可以參考下
    2024-11-11
  • 從組件封裝看Vue的作用域插槽的實現(xiàn)

    從組件封裝看Vue的作用域插槽的實現(xiàn)

    這篇文章主要介紹了從組件封裝看Vue的作用域插槽的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02

最新評論