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 相关文章推荐
广告显示判断
Aug 31 Javascript
document.documentElement &amp;&amp; document.documentElement.scrollTop
Dec 01 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
Mar 23 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
May 26 Javascript
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
js中小数转换整数的方法
Jan 26 Javascript
JavaScript基于原型链的继承
Jun 22 Javascript
js无法获取到html标签的属性的解决方法
Jul 26 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
Sep 19 Javascript
webpack打包node.js后端项目的方法
Mar 10 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
Aug 10 Javascript
jQuery 淡入/淡出效果函数用法分析
May 19 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中for循环语句的几种变型
2007/03/16 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
js实现时钟定时器
2020/03/26 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
python调用cmd命令行制作刷博器
2014/01/13 Python
用Python编程实现语音控制电脑
2014/04/01 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
硕士学位申请报告
2015/05/15 职场文书
欢迎新生标语2015
2015/07/16 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技
zabbix配置nginx监控的实现
2022/05/25 Servers