Vue 2 <keep-alive> not working with <router-view> and key

ⅰ亾dé卋堺 提交于 2019-12-02 03:51:59

I don't think you will be able to cache router-view using keep-alive. From the documentation of keep-alive:

keep-alive does not work with functional components because they do not have instances to be cached.

And router-view is a functional component, from the documentation:

The component is a functional component that renders the matched component for the given path.

To make this work, you need to have dynamic component inside keep-alive, like following:

<keep-alive>
  <products ></products>
</keep-alive>

Have a look from what I posted here for vue 2+:

vue.js keep-alive and router-view

If you want to swap things around based on the route url you can add children to your routes.js file and bind off parameters that way. For example if you wanted to have your component kept alive but need the data to change from part of the path you can do something like this:

{ 
  path: 'products', component: Products, ...,
  children: [
              { path: 'Overview/:name', props: true, component: Overview },
              { path: 'Overview/:name/:id', props: true, component: Details }
            ]
}

You can route first to /Products, then on say user click of an image or list of whatever you want route to /Products/Overview/Memes, after the user then clicks a specific meme you could route to /Products/Overview/Memes/MrPotatoHead and have the component load data on Mr Potato Head or something to that effect.

Its important to note that the Products component will be kept alive but the sub components will not. Even if you wrap the sub components template in keep-alive it will be destroyed:

destroy nested keep-alive components

Just because your component is re-mounted and therefore fires your function on the mounted hook doesn't mean it was ever destroyed. To test if it was kept alive, console log something on the destroyed hook, and if it doesn't fire the console log, the keep-alive is working. I've run your same code, and it seems to work in Vue 2 at least.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!