说到Vue的简单、便捷、高效,谁用谁喜欢,自然企业应用也来玩一把,三大经典组件:树控件,网格控件,选项卡控件;

本章先说选项卡tab控件的嵌入iframe

本次主要解决以下问题:

1.tab控件混合vue-component-view与iframe-view;

2.切换tab, iframe-view 保持原界面不刷新,与keep-alive效果等同;

3.关闭tab中的iframe-view后,将重新打开,不作cache;

问题1:

将 <router-view></router-view> 与 iframe-view 列表 分开渲染

大师兄的案例 中可以学到,tab切换iframe-view不刷新的原理是:渲染iframe列表,并通过匹配当前路由名称 v-show="$route.path === item.path"  控制切换显示

其中一个iframe-view;而router-view列表中,对应的component为空即没有内容显示

P:其中一个 iframe-view

<template>
<iframe width="500px" height="500px" src="http://www.baidu.com"></iframe>
</template>

P: 跳转路由App-view

<template>
<div>
<!-- Vue的router-view -->
<keep-alive>
<router-view></router-view>
</keep-alive> <!-- iframe页 -->
<component
v-for="item in hasOpenComponentsArr"
:key="item.name"
:is="item.name"
v-show="$route.path === item.path"
></component>
</div>
</template>

问题2:

关键点在于: 不使用默认component 属性,自定义的属性iframeComponent取而代之,手动注入组件,防止挂载组件导致重新渲染刷新;

import Vue from 'vue/dist/vue.js'
import App from './App.vue'
import VueRouter from 'vue-router';
import F1 from './components/f1';
import F2 from './components/f2'; const Index = { template: '<div>Index</div>' }
const routes = [
{
path: '/f1',
name: 'f1',
iframeComponent: F1
},
{
path: '/f2',
name: 'f2',
iframeComponent: F2
},
{
path: '/index',
component: Index,
children: [
{
path: '/f3',
iframe: true
}
]
}
] const router = new VueRouter({
routes // (缩写)相当于 routes: routes
});
Vue.config.productionTip = false Vue.use(VueRouter);
new Vue({
render: h => h(App),
router
}).$mount('#app')

问题3:

当你已经将iframe-view达到keep-alive的效果时,已经成功了一半,却不知关闭tab后,iframe-view的真身还存在,只是v-show=false隐藏而已,再次打开时还是上次的样子,此时显示应该是一个新的tab显示。

解决此问题的关键点是:关闭tab时必须将它从iframe-view列表中移除,再次打开将它加入到列表中, computed过滤出iframe

computed: {
hasOpenComponentsArr() {
return this.$router.options.routes.filter(item => item.iframeComponent);
}
},

add / remove 方法可自行补充,此人懒没办法。。。

vue tab嵌入iframe切换不刷新,相对完整的方案的更多相关文章

  1. 解决:mui 的 选项卡 + 下拉刷新 功能,在其中嵌入 iframe 后,在 iphone 的情况下,iframe 的内容不能滚动,只显示第一屏内容。

    我所遇到的情况是,使用 mui 的 选项卡 + 下拉刷新 功能时,其中有2个页面是嵌入了别的网站的页面,而别个几个是通过 ajax 加载本网站的数据.然后 在其中嵌入 iframe 后,在 iphon ...

  2. 移动端tab滑动和上下拉刷新加载

    移动端tab滑动和上下拉刷新加载 查看demo(请在移动端模式下查看) 查看代码 开发该插件的初衷是,在做一个项目时发现现在实现移动端tab滑动的插件大多基于swiper,swiper的功能太强大而我 ...

  3. Flutter BottomNavigationBar切换会刷新当前页面解决方

    问题描述 BottomNavigationBar 是flutter 中最常用的UI组建,刚接触时发现在切换tab 的时候,会刷新当前的所有状态,每个页面都会重新刷新.于是乎,在这里先记录下解决方案. ...

  4. Js控制iFrame切换加载网址

    <html> <head> <title>Js控制 iFrame 切换加载网址</title> </head> <body> & ...

  5. session失效后,登录页面嵌入iframe框架

    在登录页面的onload方法中加入以下代码解决: //防止登录页面嵌入iframe框架 if (top.location != self.location){ top.location=self.lo ...

  6. 响应式嵌入 iframe Pym.js

    Pym.js 可以让你在嵌入 iframe 的时候可自动的对 iframe 的大小进行调整以适应父一层容器,并且可以避免跨域问题. 支持浏览器: Internet Explorer 9, 10 (Wi ...

  7. 修复duilib CEditUI控件和CWebBrowserUI控件中按Tab键无法切换焦点的bug

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41556615 在duilib中,按tab键会让焦点在Button一类的控 ...

  8. Tab页签切换

    js之tab页签切换效果       现在web网站,很多地都需要用到tab页签. 示例:         $(document).ready(function(){               va ...

  9. Google street、Google satellite 、百度地图Iframe切换桥接JS

    1.地图切换方法 注意:父页面访问Iframe页面JS方法需根据Iframe的名字来调用如:named "mapIfame" 即 mapIfame.window.iframeFun ...

随机推荐

  1. VBA for循环

    for循环是一种重复控制结构,它允许开发人员有效地编写需要执行特定次数的循环. 语法 以下是VBA中for循环的语法. For counter = start To end [Step stepcou ...

  2. 前端知识总结--ES6新特性

    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...

  3. C#-NPOI操作EXCEL

    1.获取NUGET NPOI包. 2.引用命名空间 using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using NPOI.HSSF.UserMode ...

  4. python编码和解码

    一.什么是编码 编码是指信息从一种形式或格式转换为另一种形式或格式的过程. 在计算机中,编码,简而言之,就是将人能够读懂的信息(通常称为明文)转换为计算机能够读懂的信息.众所周知,计算机能够读懂的是高 ...

  5. php中long2ip和2iplong

    <?php $string=ip2long("127.0.0.1"); $ip=long2ip($string); echo $string; echo "< ...

  6. 用js刷剑指offer(栈的压入、弹出序列)

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  7. jFinal的小知识点总结

    sql批处理 // 批处理sql List<String> sqlList = new ArrayList<String>(); sqlList.add("delet ...

  8. Google hacking 语法

    a b c 自动对词进行拆分匹配 拆分标准 空格 "a b c " 把a b c 当成一个整体去查 " a*b" *通配符 里面是一个或者多个 以a开头 b结尾 ...

  9. centos中python2.7被覆盖,yum,python重新安装

    参考如下,问题以解决,绝对有效 下载链接yum和python2.7网盘 链接:https://pan.baidu.com/s/1sC2crFW1I8F7zndJU0jjcA 提取码:5kia 直接参考 ...

  10. 《AlwaysRun团队》第三次作业:团队项目的原型设计

    <AlwaysRun团队>第三次作业:团队项目的原型设计 项目 内容 这个作业属于哪个课程 [任课教师博客主页链接](https://home.cnblogs.com/u/nwnu-dai ...