Vue生命周期activated之返回上一页不重新请求数据
activated: 英文原意使活动、触发
在Vue的生命周期函数中,这个好像用的不是特别多?(也许只是在我的工作中这个用的不多,或者说叫几乎不用这个)
一、需求
前不久在项目中有这样一个需求
在订单页面的地址信息栏,默认通过接口填充了一个已经设置过的一个的默认地址,现在要跳转去地址列表重新选择一个地址并回填到订单页面的地址信息位置
二、尝试
常规操作
我们通常会将通过接口请求数据的方法放在==created== 或者 ==mounted==这两个生命周期中的一个里面调用。
我们知道,不管是我们刚进入这个页面还是从其他页面返回这个页面,这些生命周期都会走一遍。
问题
所以,即使你跳转到下级页面选好你所需的数据返回上一页时,你所回填的数据又被从接口请求回来的数据给覆盖了。。。,这并不是我们想要的效果!!!
三、使用keep-alive
不想让页面加载数据???可以,这时候==Keep-alive==登场了
vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗
1、缓存所有页面
如果你想缓存所有的页面,只需要修改下app.vue中的代码即可
// app.vue <template> <div id="app"> <keep-alive > <router-view></router-view> </keep-alive> <tabBar/> </div> </template>
2、缓存部分页面
如果你想缓存部分页面,有两种方式
(1)使用router.meta属性
app.vue
// app.vue <template> <div id="app"> <keep-alive > <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view> <tabBar/> </div> </template>
router.js
{ path: '/usermanage', name: 'usermanage', meta: { keepAlive: true, //该字段表示该页面需要缓存 }, ponent: resolve => require(['@/views/userManage/userManage'], resolve) // 路由懒加载 },
(2)使用vue-router 2.0的新特性
2.0提供了include/exclude两个属性 可以针对性缓存相应的组件
app.vue
<keep-alive include="a,b"> <router-view></router-view> </keep-alive>
==注意==上面代码中的a,b是需要缓存的组件的name属性值,不是路由的name值
使用keep-alive结论
当你第一进入需要缓存的页面后,页面数据被缓存下来,当你进入时,你会发现,页面的数据还是之前的数据。。。。这也不是我们想要的效果!!!!
四、activated配合keep-alive
,我们需要使用router.meta属性,修改需要缓存的组件路由如下
// keepAlive和isback这两个很重要! { path: '/usermanage', name: 'usermanage', meta: { keepAlive: true, //该字段表示该页面需要缓存 isBack: false, //用于判断上一个页面是哪个 title: '人员管理' }, ponent: resolve => require(['@/views/userManage/userManage'], resolve) // 路由懒加载 },
然后修改需要缓存的组件中的代码(只放重点部分)
<script> export default { name: 'currentName', data() { return { isFirstEnter: false, // } }, beforeRouteEnter(to, from, next) { if (from.name == 'nextName') { // 这个name是下一级页面的路由name to.meta.isBack = true; // 设置为true说明你是返回到这个页面,而不是通过跳转从其他页面进入到这个页面 } next() }, mounted() { }, activated() { if (!this.$route.meta.isBack || this.isFirstEnter) { this.initData() // 这里许要初始化dada()中的数据 this.getDataFn() // 这里发起数据请求,(之前是放在created或者mounted中,现在只需要放在这里就好了,不需要再在created或者mounted中请求!!) } this.$route.meta.isBack = false //请求完后进行初始化 this.isFirstEnter = false;//请求完后进行初始化 }, } </script>
大功告成
这样就实现了从其他页面跳转到这个页面时会请求数据,当从下级页面返回这个页面时就不会重新请求数据
以上这篇Vue生命周期activated之返回上一页不重新请求数据操作就是长沙网络推广分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持狼蚁SEO。
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南