Vue生命周期activated之返回上一页不重新请求数据操作


Posted in Javascript onJuly 26, 2020

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, //该字段表示该页面需要缓存
   },
   component: 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: '人员管理'
   },
   component: 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之返回上一页不重新请求数据操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
你必须知道的JavaScript 变量命名规则详解
May 07 Javascript
Javascript事件实例详解
Nov 06 Javascript
JavaScript弹窗基础篇
Apr 27 Javascript
jQuery中deferred对象使用方法详解
Jul 14 Javascript
Vue 实用分页paging实例代码
Apr 12 Javascript
ES6正则的扩展实例详解
Apr 25 Javascript
JavaScript 中的 this 简单规则
Sep 19 Javascript
详细分析JS函数去抖和节流
Dec 05 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
Dec 07 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
Oct 19 Javascript
webpack打包非模块化js的方法
Oct 24 Javascript
使用React-Router实现前端路由鉴权的示例代码
Jul 26 #Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
Jul 26 #Javascript
vue 页面回退mounted函数不执行的解决方案
Jul 26 #Javascript
vuex分模块后,实现获取state的值
Jul 26 #Javascript
何时/使用 Vue3 render 函数的教程详解
Jul 25 #Javascript
全面解析JavaScript Module模式
Jul 24 #Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
Jul 24 #Javascript
You might like
APMServ使用说明
2006/10/23 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
php microtime获取浮点的时间戳
2010/02/21 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
javascript新手语法小结
2008/06/15 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
Python类的动态绑定实现原理
2020/03/21 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
国际贸易专业推荐信
2013/11/15 职场文书
公司活动策划方案
2014/01/13 职场文书
幼儿园评语大全
2014/04/17 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
青年文明号申报材料
2014/12/23 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript