okw*_*wme 7 javascript vue.js vue-router vue-component
我将 vue-router 与一系列组件(如选项卡)一起使用。每个<router-link>都是一个选项卡,下面的空间是<router-view>. 其中两个选项卡是具有不同过滤器的相同组件,假设它们是products并且路由器添加了用于过滤的参数:/products/new& /products/sale。
里面products是单独的product组件,当路由打开时它们会被安装。我的问题是,当我在路由之间切换并且更改过滤器参数时,product每次都会重新安装组件。我想缓存它们,以便来回切换更容易。为此,我设置<keep-alive>并添加:key='$route.fullPath'到我的<router-view>但它们似乎没有被缓存。每个product仍烧成mounted()事件,当我之间进行切换products。
<keep-alive>
<router-view :key='$route.fullPath'></router-view>
</keep-alive>
Run Code Online (Sandbox Code Playgroud)
我应该将每个products视图变成一个单独的组件吗?
Moh*_*sen 13
要在路由器视图中使用 keep-alive,您应该在视图路由器上使用唯一键,如下所示:
<keep-alive>
<router-view :key="$route.fullPath"></router-view>
</keep-alive>
Run Code Online (Sandbox Code Playgroud)
不要忘记在保持活动时使用 max 属性以防止内存开销
<keep-alive max="5">
Run Code Online (Sandbox Code Playgroud)
或者只包含想要缓存的组件:
<keep-alive include="FirstComp,SecondComp">
Run Code Online (Sandbox Code Playgroud)
对于组件内的每个组件,如果你想要缓存,你需要让它们保持活动状态
<keep-alive>
<product></product>
</keep-alive>
Run Code Online (Sandbox Code Playgroud)
小智 10
当我尝试上面的解决方案(在 Vue 3 中)时,我在控制台中得到了这个
[Vue Router warn]: <router-view> can no longer be used directly inside <transition> or <keep-alive>.
Use slot props instead:
<router-view v-slot="{ Component }">
<keep-alive>
<component :is="Component" />
</keep-alive>
</router-view>
Run Code Online (Sandbox Code Playgroud)
所以我像这样将其复制到 App.vue 中......
[Vue Router warn]: <router-view> can no longer be used directly inside <transition> or <keep-alive>.
Use slot props instead:
<router-view v-slot="{ Component }">
<keep-alive>
<component :is="Component" />
</keep-alive>
</router-view>
Run Code Online (Sandbox Code Playgroud)
它有效:)
我不认为你能够router-view使用缓存keep-alive。来自以下文档keep-alive:
keep-alive 不适用于功能组件,因为它们没有要缓存的实例。
并且router-view是一个功能组件,来自文档:
该组件是一个功能组件,它为给定路径呈现匹配的组件。
为了使其工作,您需要在内部有动态组件keep-alive,如下所示:
<keep-alive>
<products ></products>
</keep-alive>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13705 次 |
| 最近记录: |