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 相关文章推荐
基于jquery的tab切换 js原理
Apr 01 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
Apr 16 Javascript
js中的值类型和引用类型小结 文字说明与实例
Dec 12 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
Feb 12 Javascript
jQuery 操作option的实现代码
Mar 03 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
Feb 27 Javascript
js网页实时倒计时精确到秒级
Feb 10 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
Aug 21 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
基于Vue实现拖拽效果
Apr 27 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
Apr 29 Javascript
小程序接入腾讯位置服务的详细流程
Mar 03 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
克隆一个新项目的快捷方式
2013/04/10 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
详解Python中for循环的使用方法
2015/05/14 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
django中静态文件配置static的方法
2018/05/20 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
python基于Selenium的web自动化框架
2019/07/14 Python
python生成大写32位uuid代码
2020/03/03 Python
公司市场部岗位职责
2013/12/02 职场文书
管理信息系学生的自我评价
2014/01/11 职场文书
移风易俗倡议书
2014/04/15 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
公司人力资源管理制度
2015/08/05 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js
V Rising 服务器搭建图文教程
2022/06/16 Servers