vue中定时刷新页面,更新数据(多个接口请求)

一个vue页面,我拆分成了好几个模块,每个模块中都会有接口请求,现在需求是定时刷新页面,获取新数据,如果用定时器的话,在每个模块中都加定时器吗??这样有点不太好感觉,大家有什么思路吗
我考虑过路由跳转,重新跳进这个页面,但是在这个项目中不适合,还有其他思路吗

阅读 6k
2 个回答

给你提供种思路:发布订阅者模式

1、在主页面暴露个定时刷新对象intervelRefreshObj,它就是个普通的对象,里面可以订阅事件,和发布事件;

2、在各个组件引入改对象,把需要刷新数据的接口方法,订阅到该对象;

3、再在主界面,定时触发“定时刷新对象”的发布,即可实现每个组件的实时刷新;

首先业务是不是无法改变。如果可以,我觉得你父页面应该有初始化查询事件,父带条件查询所以数据,然后父传子数据渲染子页面。(我们项目都这样搞,见代码)

其次,如果无法改变业务。每个子模块都有调接口,我就觉得你用重载组件this.$nextTick。父页面定时到点,然后调用this.$nextTick事件,把你所有组件刷一次。

<父模块>
   <子模块一 :subData1=data1> </子模块一>
   <子模块二 :subData2=data2> </子模块二>
   <子模块三 :subData3=data3> </子模块三>
</父模块>

数据:
 data(){
   return{
    data1:[], //模块一数据
    data2:[], //模块二数据
    data3:[], //模块三数据
   }
 }
 
 方法:
 getData(){
   ...do something  //你get或者post请求数据
   
 }
 
 timing(){          //定时方法
   .....
   this.getData()
 }
 
 .....................分割线...................
 子模块:
 <子模块一>
    .... 
 </子模块一>
 
 监听数据:
 props: {
    data1: Array,
 },
 watch(){  //监听异步数据父传子
    data1(){
      this.data = this.data1  //赋值给子页面初始化数据this.data
    }
 }
 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏