vue-element-admin iframes 組件 保留 iframe 操作狀態


代碼貼前面,gitee地址:https://gitee.com/chkhk/vue-element-admin 可以自行拉到本地運行看看效果

預覽效果,可以拉到文章最底下看 GIF

 

起因

最近做的后台管理系統,用的是 vue-element-admin 的框架。

 

然后又有嵌入其它系統頁面的需求,一開始是直接放在頁面上的 iframe,但是發現切換頁面再切換回去后,iframe 也跟着一起刷新了:

比如你嵌入了百度,你在百度搜了個東西,然后到其他頁面去操作了,然后回到百度,就會發現之前的搜索結果不見了,又變回百度首頁了

 

 

 

在網上翻了幾圈也沒有發現一個好一點的解決方案,於是准備自己寫一個。

 


 

效果

要求直接在框架里嵌入其他系統的頁面,在切換頁面的時候能保留 iframe 之前的操作狀態

 


 

分析

vue-element-admin 主要的頁面區域,用了 vue 的 keep-alive 組件,在通過 TagView 切換時,對應匹配到的頁面組件,數據是會被緩存起來的。

所以一般頁面直接切換后,之前的操作都還是恢復到切換前的,沒有改變。它本身並不是單純的顯示隱藏,而是會去銷毀重載 dom 節點的,所以在頁面上添加的 iframe ,自然也沒辦法保留操作。

然后自己一開始想了幾個方案,比如修改路由,增加參數,動態的判斷該頁面是走顯示隱藏邏輯還是 keep-alive。會變得很復雜,且對原框架修改比較大,所以想找個簡單一點的方法。(其實還是實力不足,哈哈)

 


 

方案

后來想到的解決辦法是,不改路由這些,原來怎么操作頁面,現在還是怎么操作。直接在 AppMain 組件(主顯示區)蓋上一層,專門顯示 iframe 頁面。這樣只需要簡單的配置和操作,就能實現效果。比較方便,而且簡單。

大概思路就是,專門一個 iframes 組件,蓋在主顯示層上,每次打開對應頁面時,通過 vuex 共享狀態,新增,顯示,隱藏,銷毀對應的 iframe,因為用的是顯示隱藏,所以切換后還能保留切換前的狀態。

 


 

代碼

改動其實不大,添加4個新文件,修改一個文件,如下圖:

 

具體的內容可以查看本次提交:

https://gitee.com/chkhk/vue-element-admin/commit/9f1fcd03f92acf32d542fa322140a4e8feb724bb

 

使用 demo 可以查看 gitee 項目 https://gitee.com/chkhk/vue-element-admin

 


 

對比

iframes 效果:

 


 

總結

以上就是記錄一下自己的學習過程吧,解決問題后還是挺開心的,實現也是用的最簡單的思路了

如果有其它更好的方案,也希望大佬能在評論區交流交流啦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM