keep-alive与路由器切换问题

news/2024/7/9 23:37:42 标签: vue, vuex, keep-alive
问题描述

每个页面通过computed和watch监测vuex参数,在参数变化时请求ajax更新数据。
在公共组件改变参数时,所有页面都会去重新请求数据,当前页面根据数据重新渲染,但切换回其他页面时,由于keep-alive,页面没有变化。

//vuex  store.js
const state = {
	classes: "",
 	day: "",
}
const mutations = {
  updateClasses(state,payload) {
    state.classes=payload
  },
  updateDay(state,payload) {
    state.day=payload
  },
}
//vue  computed
 classes() {
  return this.$store.state.classes
 },
 day() {
   return this.$store.state.day
 },
 //vue  watch
classes(val) {
    this.updateClassChange()//ajax请求
},
day(val) {
    this.updateDayChange()//ajax请求
}
//公共组件
this.$store.commit('updateClasses', {this.classs})
this.$store.commit('updateDay', {this.day})
解决方法一

第一步:判断此时路由是否是当前页面,避免多余的数据请求,只有当前页面重新请求数据

watch: {
  classes(val) {
    if(this.$route.name=="index") {
      this.updateClassChange()
    }
  },
  day(val) {
    if(this.$route.name=="index") {
      this.updateDayChange()
    }
  }
},

第二部:是用钩子函数activated,每切换路由时重新加载,避免参数变化时页面没有变化

activated() {
 if(this.$route.name=="index"){
     this.init()
   }
 },

该方案问题:参数不变时,虽然不重新渲染,但每次切换路由也会重新请求

解决方法二

vue为每一个页面存储一个公共组件参数,使个页面参数相互不干扰,keep-alive也不混乱

//vuex  store.js
const state = {
	classesObj:{
    index:"",
    addict:"",
    consume:"",
    mental:""
  },
  dayObj:{
    index:"",
    addict:"",
    consume:"",
    mental:""
  },
}
const mutations = {
 setClassesObj(state,payload){
    if(payload.index){
      state.classesObj.index=payload.index
    }
    if(payload.addict){
      state.classesObj.addict=payload.addict
    }
    if(payload.consume){
      state.classesObj.consume=payload.consume
    }
    if(payload.mental){
      state.classesObj.mental=payload.mental
    }
  },
  setDayObj(state,payload){
    if(payload.index){
      state.dayObj.index=payload.index
    }
    if(payload.addict){
      state.dayObj.addict=payload.addict
    }
    if(payload.consume){
      state.dayObj.consume=payload.consume
    }
    if(payload.mental){
      state.dayObj.mental=payload.mental
    }
  },
}
//vue  computed
classes() {
  return this.$store.state.classesObj[this.$route.name]
},
day() {
  return this.$store.state.dayObj[this.$route.name]
},
 //vue  watch
classes(val) {
    this.updateClassChange()//ajax请求
},
day(val) {
    this.updateDayChange()//ajax请求
}
//公共组件
this.$store.commit('setClassesObj', {[this.$route.name]:this.classs})
this.$store.commit('setDayObj', {[this.$route.name]:this.day})

http://www.niftyadmin.cn/n/1503443.html

相关文章

leetcode 202. 快乐数 python实现

思想: 对输入数据 把每个位数平方求和 得到结果如果是1 就返回真 否则 对这个结果递归 啥时候事后返回假: 返回假 说明进入无限循环了。 啥时候会无限循环? 某一次求平方和的结果,之前得到过这个结果,那就会无限循环了…

【转】第一个Linux内核驱动程序

原文网址:http://blog.csdn.net/nexttake/article/details/8181008 刚看 O’REILLY 写的《LINUX 设备驱动程序》时。作者一再强调在编写驱动程序时必须 建立内核树。所谓内核树,我的理解和网上资料说的一致就是内核源码的一种逻辑形式。 先查看自己OS使用…

ES6中 用表达式或变量名作为 对象的属性名(key)

定义 var obj1{a:"1",b:"2" } var obj2{["a"1]:"1",["a"2]:"2" } var c"a" var obj3{[c]:"1", }使用 obj1.a obj1["b“] obj2["a1"] obj2["a"2] var c"a&qu…

node.js 模块和其下载资源的镜像设置

以前安装 electron 时总是失败,然后就在淘宝镜像上下载好相应版本的文件放到用户目录来解决问题。 后来研究发现 npm 不仅可以设置 node.js 模块仓库的代理, 同样可以设置像 electron、phantomjs、 node-sass 等模块的镜像代理 一、设置淘宝镜像 &#x…

工作日志2014-07-09

5:00起床 7:00到公司2.5元 12:00吃饭8元 19:30到家5元 今天支出:15.5元 工作时间: 1..ipa图片资源提取工具Extract http://blog.csdn.net/totogo2010/article/details/9061317 2.处理上拉载入效果异常(10:27未解决,不攻克了)

私钥文件的权限为什么不能设置为755

1、问题描述 在I.Mx6加载启动信息时输出如下内容 WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0755 for /usr/local/openssh/etc/ssh_host_rsa_key are too open. It is required that your private key files are NOT accessible by others. This private k…

【nginx】前后端分离部署

开发环境 前端: vue,axios,proxytablebuild打包成dist8084端口 后台: springbootmaven打包成jar包(使用springboot内置的Tomcat)已部署在8082端口 部署情况 前端: ngnix(ngin…

2018ICPC南京赛区网络赛J Sum(素数筛+找规律)

素数筛链接:https://blog.csdn.net/dl962454/article/details/76595623 【题意】 f(i):能拆成两个数的乘积,并且这两个数要求没有平方因子,并且两个数的位置互换算两种方案。 最后求f(1)f(2)f(3)...f(n)。 【解题思路】…