Vue路由器保留iframe dom元素(只是隐藏,不要破坏)

Posted

技术标签:

【中文标题】Vue路由器保留iframe dom元素(只是隐藏,不要破坏)【英文标题】:Vue router keep iframe dom element (just hide, don't destroy) 【发布时间】:2018-06-08 08:38:59 【问题描述】:

我正在使用 vue-router 3.0 开发 Vue 2.5 SPA。

某些视图包含渲染 iframe 的子组件。

当我切换到另一条路线并返回到呈现 iframe 的路线时,相应的 iframe 会重新加载,即使它之前已被访问过。这种行为是不受欢迎的,因为在这种情况下会导致糟糕的用户体验。当用户返回视图时,iframe 状态应保持与以前相同。

我猜想重新加载是由于离开路线时 dom 被破坏造成的。即使是以下结构也不能阻止它:

<keep-alive>
  <router-view></router-view>
</keep-alive>

&lt;keep-alive&gt; 似乎让 Vue 组件本身保持活跃,但不是 dom 表示。

有什么方法(或解决方法)在切换路由时保持 dom?允许隐藏而不是交换组件的路由器模式将是完美的。

【问题讨论】:

你只有一层嵌套路由吗? 我有多层嵌套路由。 iframe 位于第二层。一个简化的例子:routes: [component: Master, children: [path: '/iframe', component: IFrameContainerComponent]] 【参考方案1】:

您需要在 iframe 上使用 v-show。 在路线上,您不会指定组件

<template>
    <iframe v-show="$route.path == '/foo'">
</template>

<script>
routes: [
         path: '/foo',
         path: '/bar' 
    ]
</script>

ps...我正在寻找一种更优雅的方式来做到这一点...应该是路由器上的一个属性,告诉我们要隐藏,而不是破坏/重新创建

【讨论】:

对于这个具体的项目,问题的解决方案对我来说不再重要。但无论如何,谢谢。也许github.com/LinusBorg/portal-vue 可以帮助类似的用例,但我自己没有尝试过,它可能有同样的问题(销毁/创建)。

以上是关于Vue路由器保留iframe dom元素(只是隐藏,不要破坏)的主要内容,如果未能解决你的问题,请参考以下文章

ios上网页iframe里,把页面下拉,进行元素的隐藏显示和增删节点的dom操作页面会瞬间回到顶部

VUE 条件渲染 v-ifv-show

vue怎么触发元素的原生事件

vue的滚动事件,怎么实现

vue 控制元素的显示和隐藏

vue中动态路由组件缓存及生命周期函数