Vue多系統(tǒng)切換實(shí)現(xiàn)方案
前言
公司分好幾個(gè)后臺模塊,統(tǒng)一使用vue+elementUi框架開發(fā),每一個(gè)后臺模塊都是單獨(dú)團(tuán)隊(duì)開發(fā)的。并且?guī)讉€(gè)系統(tǒng)整體的風(fēng)格、布局一樣的,包括左側(cè)邊欄,上方的面包屑等
用戶在使用的時(shí)候,可能要切換別的系統(tǒng)就要在瀏覽器里,新打開窗口,再輸入網(wǎng)址,回車。
總結(jié)來說,低效,所以現(xiàn)在想將幾個(gè)系統(tǒng)融合到一個(gè)里邊,并且每次切換系統(tǒng)的時(shí)候保留用戶的操作。
https://github.com/Mrblackant/vueIframe
效果如圖:

實(shí)現(xiàn)思路
1.結(jié)合iframe開發(fā)上方系統(tǒng)切換的組件
2.各個(gè)子系統(tǒng)有自己的域名
開發(fā)
因?yàn)槊總€(gè)頁面都需要這個(gè)切換功能,所以我們直接在app.vue里開發(fā)。我是用vue+element開發(fā)的,所以切換的地方直接用了ele的tab切換組件。(寫法有很多種,主要是思路)
讀完這些話再看代碼,方便理解:
1.如果用v-if控制每個(gè)iframe的顯示隱藏,那么切換后系統(tǒng)后,再切換回來,iframe的屬性會(huì)使頁面會(huì)刷新,用戶的操作不能保留
2.如果純粹用elementUi的tab組件來做,頁面一進(jìn)來,就會(huì)把每個(gè)系統(tǒng)的資源加載進(jìn)來,卡的要命,所以需要做到按需加載
3.實(shí)現(xiàn):結(jié)合1、2問題,用v-if控制頁面一進(jìn)來,只加載一個(gè)默認(rèn)的系統(tǒng);tab切換的時(shí)候再利用v-if去加載該系統(tǒng)的資源;v-if只控制一次,不會(huì)隨著tab的切換變化,這樣就能保證切換系統(tǒng)時(shí)保留了用戶的操作。
代碼
app.vue
<template>
<div id="app">
<div class="allWapper">
<!-- logo -->
<div class="myLogo">
<img src="/static/mylogo.png">
</div>
<!-- 頂部tabs -->
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane class="temp" label="VUE" name="first">
<iframe v-if="ifArr.first" class="ifa" scrolling=auto src="http://panjiachen.github.io/vue-element-admin/#/dashboard" frameborder="0"></iframe>
</el-tab-pane>
<el-tab-pane class="temp" label="SF" name="second">
<iframe v-if="ifArr.second" class="ifa" scrolling=auto src="https://segmentfault.com/" frameborder="0"></iframe>
</el-tab-pane>
<el-tab-pane class="temp" label="百度" name="third">
<iframe v-if="ifArr.third" class="ifa" scrolling=auto src="https://www.baidu.com/" frameborder="0"></iframe>
</el-tab-pane>
</el-tabs>
</div>
<!-- </div> -->
<!-- <router-view/> -->
</div>
</template>
<script>
export default {
name: 'App',
data(){
return{
activeName: 'first',
ifArr:{
first:true,
second:false,
third:false
}
}
},
methods:{
handleClick(tab, event) {
let flagName=tab.name
this.ifArr[flagName]=true
}
}
}
</script>
<style>
body{
margin:0;
padding:5px;
}
.ifa{
width:100%;
height:100%;
}
.el-tabs__content{
border: 1px solid red;
border-top:none;
position: absolute;
top: 62px;
left: 0;
bottom: 0;
right: 0;
// width:100%;
// height:80%;
}
.allWapper{
display:flex;
border-bottom:1px solid #e4e7ed;
}
.el-tabs__header{
margin-bottom:0px;
}
.el-tabs__header .el-tabs__item{
margin:8px 0;
font-size:16px;
padding-left:29px;
}
.temp{
width:100%;
height:100%;
}
.myLogo{
width: 200px;
height: 53px;
margin-right:35px;
}
.myLogo img{
width:100%;
}
</style>
- Vue在頁面右上角實(shí)現(xiàn)可懸浮/隱藏的系統(tǒng)菜單
- 基于Vue實(shí)現(xiàn)后臺系統(tǒng)權(quán)限控制的示例代碼
- 利用Vue.js+Node.js+MongoDB實(shí)現(xiàn)一個(gè)博客系統(tǒng)(附源碼)
- 利用Vue.js框架實(shí)現(xiàn)火車票查詢系統(tǒng)(附源碼)
- 使用vue.js2.0 + ElementUI開發(fā)后臺管理系統(tǒng)詳細(xì)教程(一)
- 使用vue.js2.0 + ElementUI開發(fā)后臺管理系統(tǒng)詳細(xì)教程(二)
- Vue.js每天必學(xué)之指令系統(tǒng)與自定義指令
相關(guān)文章
vuex 第三方包實(shí)現(xiàn)數(shù)據(jù)持久化的方法
本文主要介紹了vuex 第三方包實(shí)現(xiàn)數(shù)據(jù)持久化的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
基于vue+elementPlus的動(dòng)態(tài)導(dǎo)航標(biāo)簽欄tabs具體過程
這篇文章主要給大家介紹了關(guān)于基于vue+elementPlus的動(dòng)態(tài)導(dǎo)航標(biāo)簽欄tabs的相關(guān)資料,本文主要詳述了在系統(tǒng)上添加導(dǎo)航標(biāo)簽欄功能時(shí),首次嘗試的過程,并且希望能為同行提供一個(gè)小demo,需要的朋友可以參考下2024-10-10
Vue 3.0 前瞻Vue Function API新特性體驗(yàn)
這篇文章主要介紹了Vue 3.0 前瞻Vue Function API新特性體驗(yàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
vue3+vite應(yīng)用中添加sass預(yù)處理器問題
這篇文章主要介紹了vue3+vite應(yīng)用中添加sass預(yù)處理器問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
Vue.js基礎(chǔ)學(xué)習(xí)之class與樣式綁定
這篇文章主要為大家介紹了Vue.js的Class與樣式綁定,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
解決vue中無法動(dòng)態(tài)修改jqgrid組件 url地址的問題
下面小編就為大家分享一篇解決vue中無法動(dòng)態(tài)修改jqgrid組件 url地址的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
vue3源碼分析reactivity實(shí)現(xiàn)原理
這篇文章主要為大家介紹了vue3源碼分析reactivity實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

