Skip to content

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

Open
@TieMuZhen

Description

@TieMuZhen

前言

问题

如果我们按照 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 - 字符串或正则表达式。任何匹配的组件都不会被缓存。

参考文献

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions