vue-element-admin项目中tagView嵌入iframe不刷新重载

vue-element-admin项目中tagView嵌入iframe不刷新重载

最近使用vue-element-admin来开发项目,因为以前老项目太大,暂不重构,如要通过iframe嵌套在新项目中,通过router来重写url加载,但是业务需要切换菜单或者tagView不能刷新重载iframe页面,因此需要改造

一、vue-element-admin是通过keep-alive来缓存router-view组件内容,但是其router-view中的iframe是重新通过src加载,相当于iframe重载

- 解决方案:
 - iframe组件不走keep-alive和router-view,而是一直处在body中
 ```
 // AppMain.vue
 <transition name="fade-transform" mode="out-in">

  <div class="app-contain">
    <!-- iframe不走重新加载,而是隐藏,保证重载 -->
    <div v-show="isIframePage">
      <wallet-iframe />
    </div>
    
	<!-- 非iframe,正常页面走router-view -->
    <keep-alive :include="cachedViews" :exclude="notCachedViews">
      <router-view v-if="isRefresh && !isIframePage" :key="key" />
    </keep-alive>
  </div>

</transition>

//script
data(){
	return {
		isRefresh: true
	}
},
computed() {
	isIframePage() {
	  // 是否iframe页面,目前全部是iframe
	  return !this.$route.meta.notIframe;
	}
}
 ```

二、监听$route,收集iframe消息,存入Array中,通过当前路由来展示和隐藏

- 解决方案:
```
// iframeContain.vue
  <div class="iframe-contain">
	<el-card class="iframe-contant el-card-8">
	  <iframe 
		v-show="curIframeName === item.name" 
		v-for="item in iframeUrlArr" 
		:key="item.name " 
		id="frameBox" 
		:src="item.url" 
		class="frame-box" />
	</el-card>
  </div>
  
  // script
  import { uniqBy } from 'lodash';
  data() {
	  curIframeName: '', // 当前iframe名称,唯一值
	  iframeUrlArr: [], // 收集所有打开的iframe
  },
  watch: {
	$route: {
	  handler: function(route) {
		console.log('路由', route, this)
		this.curIframeName = route.name;
		this.iframeUrlArr.push({
		  name: route.name,
		  url: window.location.origin + (route.meta.specialUrl || route.path), // 根据自己项目来写
		})

		// 去重,可自己写方法Object.keys, includes, push
		this.iframeUrlArr = uniqBy(this.iframeUrlArr, 'name')
	  },
	  immediate: true
	}
  },
```
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值