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 验证日期的函数
Mar 18 Javascript
一个网马的tips实现分析
Nov 28 Javascript
父节点获取子节点的字符串示例代码
Feb 26 Javascript
加随机数引入脚本不让浏览器读取缓存
Sep 04 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
Jul 22 Javascript
详解JS数组Reduce()方法详解及高级技巧
Aug 18 Javascript
vue实现商城购物车功能
Nov 27 Javascript
微信小程序实时聊天WebSocket
Jul 05 Javascript
微信小程序列表中item左滑删除功能
Nov 07 Javascript
JS回调函数简单易懂的入门实例分析
Sep 29 Javascript
jQuery带控制按钮轮播图插件
Jul 31 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
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
Python CSV模块使用实例
2015/04/09 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
Python tkinter和exe打包的方法
2020/02/05 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
python设置中文界面实例方法
2020/10/27 Python
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
中学生团员自我评价分享
2013/12/07 职场文书
2014政务公开实施方案
2014/02/19 职场文书
卫生系统先进事迹
2014/05/13 职场文书
宣传口号大全
2014/06/16 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
文员岗位职责
2015/02/04 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
总结Python常用的魔法方法
2021/05/25 Python
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python