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 相关文章推荐
onclick与listeners的执行先后问题详细解剖
Jan 07 Javascript
九种js弹出对话框的方法总结
Mar 12 Javascript
用js的for循环获取radio选中的值
Oct 21 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
Jun 24 Javascript
Bootstrap入门教程一Hello Bootstrap初识
Mar 02 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
May 26 Javascript
angular 内存溢出的问题解决
Jul 12 Javascript
详解js的视频和音频采集
Aug 09 Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 Javascript
Vue.js路由实现选项卡简单实例
Jul 24 Javascript
JS数组splice操作实例分析
Oct 12 Javascript
基于JQuery和DWR实现异步数据传递
Oct 16 jQuery
使用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
提问的智慧(2)
2006/10/09 PHP
PHP 金额数字转换成英文
2010/05/06 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
语义化 H1 标签
2008/01/14 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
原生JS检测CSS3动画是否结束的方法详解
2019/01/27 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
Python 基础教程之str和repr的详解
2017/08/20 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
python super的使用方法及实例详解
2019/09/25 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
体育教育专业自荐信范文
2013/12/20 职场文书
小小的船教学反思
2014/02/21 职场文书
教学质量评估实施方案
2014/03/17 职场文书
企业法人授权委托书
2014/04/03 职场文书
英语故事演讲稿
2014/04/29 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
个人先进事迹材料
2014/12/29 职场文书
小数乘法教学反思
2016/02/22 职场文书