easyui一个页面两个搜索框对应两张表_Vue keepAlive 页面缓存

大家在做后台管理系统时候有没有遇到过这种场景:一个列表页面,含分页,有多个搜索条件,可以编辑。

编辑页,详情页,注册页都是新页面通过路由跳转,不是组件或弹框方式。

d235d575f8aa3b81fa13128ab618ae0f.png
标红区域为查询条件

392671ed4f48fb3c35519a4a6a1d8bf3.png
控制表头显示,这个也需要缓存

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

遇到了这个问题,我尝试过存储vuex、session、组件引入传参等方式,发现都不太合适。

vuex:首先说明,不要为了使用 vuex 而使用,而是与其他方式相比,只有 vuex 是最方便的时候在使用。拿我的项目举例,我的这个页面需要 7 个搜索条件还有分页的页码及每页的条数,还有一个控制表头显示的列表共10个参数。如果使用 vuex 需要引入并且添加store中的方法代码【各js相互引入,抛出,定义等】还需要在组件中有修改值得地方commit。10个参数,使用 vuex 相对来说代码量比较大且操作繁琐。

session:代码量和 vuex 不相上下,而且存储session其实和暴露明文是一样的,一些信息会暴露出去,我很不推荐。

组件引入:10个参数传来传去很是麻烦而且容易混乱。

想了又想想了又想,记起来还有个 KeepAlive 这么个东西:Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染 DOM。

于是我在 router-view 外面包裹了 keepalive,我兴高采烈的进行自测,来回切换页面,切回来上次的操作的确被记录了。我很开心,像是发现了新大陆一样,哈哈

但是有个问题,因为编辑页、注册页等是通过路由跳转,当我们编辑了某条数据,返回列表页时,因为被缓存列表页展示的数据并没有被更新过来,只有刷新下才能更新过来。这怎么办?!难道这个方法也不行?我实在没办法了,于是百度看看度娘对这个问题有没有什么见解。

大家也都晓得,你搜的东西往往废话连篇还说不到点上。还是算了,去官网看了下keepalive,突然想起来,使用 keepalive 会有两个生命周期

5770cc335c963bd210510846c87f6f57.png

于是在 activated 声明周期内重新调用获取需要更新的方法。问题解决了~

KeepAlive使用方法:

1). 在 route 的 index.js 中标识需要缓存的页面

933e713f7fd6b5b5b245fb63965c4a37.png

2). 在 用 keepAlive 包裹 router-view

b9f7405c0185c8d5cf659087c66ada1d.png

大家遇到这种问题时怎么解决的呢?有好的方法分享出来,一起进步哦,欢迎评论~

Vue.js中创建一个类似于EasyUI Layout的自适应布局页面,你可以使用Element Plus这样的基于Vue的组件库,它提供了响应式的设计和灵活的栅格系统。以下是基本步骤: 1. **安装依赖**: 首先,你需要安装`element-plus`和`vue-router`,如果还没有安装的话: ``` npm install element-plus vue-router ``` 2. **引入并配置**: 在你的`main.js`或`setup()`文件中导入并配置Element Plus: ```javascript import { createApp } from 'vue'; import ElementPlus from 'element-plus'; import App from './App.vue'; // 引入国际化 import lang from 'element-plus/lib/locale/lang/en-US'; // 设置语言 ElementPlus.use(ElementPlus.I18n, { locale: lang, messages: { en-US }, }); const app = createApp(App); app.use(ElementPlus); // 其他路由配置... app.mount('#app'); ``` 3. **创建Layout组件**: 创建一个名为`Layout.vue`的组件,模拟EasyUI的两栏布局: ```html <template> <div class="layout"> <el-col :span="{ xs: 24, sm: 8, md: 6, lg: 4, xl: 3 }" class="left-col"> <!-- 左侧内容 --> <router-view name="left"></router-view> </el-col> <el-col :span="{ xs: 0, sm: 16, md: 18, lg: 20, xl: 19 }" class="right-col"> <!-- 右侧内容 --> <router-view name="right"></router-view> </el-col> </div> </template> <script> export default { name: "Layout", }; </script> ``` 4. **在App.vue中使用Layout**: 将`Layout`组件作为根组件,并使用`<router-view>`标签分隔左右两侧的内容: ```html <template> <Layout> <router-view></router-view> <!-- 这里会动态渲染匹配的子组件 --> </Layout> </template> ``` 5. **路由配置**: 使用Vue Router设置路由规则,确保它们映射到正确的`Layout`组件下的子视图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值