【问题标题】:Vue Keep-Alive - Component won't stay alive during route changesVue Keep-Alive - 组件在路由更改期间不会保持活动状态
【发布时间】:2020-06-29 13:02:00
【问题描述】:

我将我的 vue 应用程序的主页定义为如下所示:

<div class="wrapper">
    <keep-alive>
      <app-header></app-header>
    </keep-alive>
    <router-view></router-view>
</div>

<script>
import appHeader from '../components/Header';

export default {
  components: {
    appHeader
  }
/* etc... */
}

我的应用 UI 基本上是这个仪表板,有许多不同的路由和子路由路径来显示许多页面,但在所有页面(组件)中,我想在页面顶部显示 app-header。

问题是我最近注意到,每点击一个按钮(这会改变 vue-router 到另一个页面的路由),app-header 会被重新创建(调用 created() 生命周期钩子函数)

我真的不明白为什么,既然我加了keep-alive,就不应该渲染一次吗?

请帮我解决这个问题,我被卡住了,我确实研究了整个互联网。

提前致谢

【问题讨论】:

  • 请帮忙,我真的想不通这个:(

标签: javascript vue.js vue-router keep-alive


【解决方案1】:

Rijosh 的回答仅适用于 Vue 2 及其路由器(Router v3.x)。如果有人使用 Vue 3(和 Router v4.x),那么 &lt;keep-alive&gt;&lt;router-view&gt; 的代码如下所示:

<router-view v-slot="{ Component }">
   <keep-alive>
      <component :is="Component" />
   </keep-alive>
</router-view>

更多信息请参见文档here

【讨论】:

    【解决方案2】:

    keep-alive 仅适用于由&lt;keep-alive&gt; 标签包裹的部分。在这里,只有app-header 组件会保持活动状态。如果您需要将此应用于路由中的所有组件,则必须将&lt;router-view&gt; 放入&lt;keep-alive&gt;

    例如:

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

    现在keep-alive将适用于所有路由。

    【讨论】:

    • 这就是重点,我不希望路由保持活动状态,我只希望应用程序标头保持活动状态。问题是目前,每次我更改路由时,应用程序标头都会调用“已创建”生命周期挂钩方法,我通过 console.log 进行检查。我希望它被创建一次,而不是重新渲染,即使我更改了路线
    • 然后,如果您的父组件本身包含在路由中,则有可能发生这种情况。不看你的组件结构和路由就不能多说。
    • 感谢您的回复。当我创建 VueRouter 对象时,我将路由(对象数组)放入其中,其中主要路由之一是“/dashboard”,并且它指向我发布的那个组件。在此之前只有 App.vue 组件,其中包含一个 包裹。那么,“如果包含父组件本身”是什么意思? '/dashboard' 路由有许多子路由,它们路由到应用程序中的不同位置,当我在那里导航并更改子路由之间的路由时,它会重新渲染。
    猜你喜欢
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2018-05-13
    • 2017-08-20
    • 2016-02-29
    • 2023-02-09
    相关资源
    最近更新 更多