Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

keep-alive缓存后怎么更新 #92

Open
TieMuZhen opened this issue Mar 2, 2022 · 0 comments
Open

keep-alive缓存后怎么更新 #92

TieMuZhen opened this issue Mar 2, 2022 · 0 comments
Labels

Comments

@TieMuZhen
Copy link
Owner

TieMuZhen commented Mar 2, 2022

前言

问题

如果我们按照 A 类型进行搜索,查出来100条数据(默认20条/页),我们翻阅到第 3 页,找到 B 数据,我们对 B 进行编辑,编辑过后回到列表页面,按照用户体验我们还是想回到按 A 搜索的第 3 页的。

KeepAlive :Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染 DOM。

但是有个问题,因为编辑页、注册页等是通过路由跳转,当我们编辑了某条数据,返回列表页时,因为被缓存列表页展示的数据并没有被更新过来,只有刷新下才能更新过来。

解决办法

// 列表页面
activated() {
  this.search()
}

用到的是keepAlive的生命周期中的activated方法,该方法在keepAlive激活时调用。所以你页面中需要的刷新都写在这里面就完成了。

但是新的问题又出现了

A页面缓存了,push进入B页面。首次进入B页面数据正常,url也正常。回退到A页面,A页面确实缓存了。再从列表中选择进入B页面。此时B页面的数据是缓存的,但是url是正常的!!!

处理方案一:
B页面也加,进行处理

// 详情页面
activated() {
  需要刷新的数据
}

处理方案二:
router中添加exclude="Detail",你不想被缓存的页面的name都写成Detail

<keep-alive v-if="keepAlive" exclude="Detail">
  <router-view :key="key"></router-view>
</keep-alive>

<keep-alive v-else exclude="Detail">
  <router-view :key="key"></router-view>
</keep-alive>

includeexclude都是针对组建名称,非路由!!

  • include - 字符串或正则表达式。只有匹配的组件会被缓存。
  • exclude - 字符串或正则表达式。任何匹配的组件都不会被缓存。

参考文献

@TieMuZhen TieMuZhen added the Vue label Mar 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant