一个vue页面,我拆分成了好几个模块,每个模块中都会有接口请求,现在需求是定时刷新页面,获取新数据,如果用定时器的话,在每个模块中都加定时器吗??这样有点不太好感觉,大家有什么思路吗
我考虑过路由跳转,重新跳进这个页面,但是在这个项目中不适合,还有其他思路吗
一个vue页面,我拆分成了好几个模块,每个模块中都会有接口请求,现在需求是定时刷新页面,获取新数据,如果用定时器的话,在每个模块中都加定时器吗??这样有点不太好感觉,大家有什么思路吗
我考虑过路由跳转,重新跳进这个页面,但是在这个项目中不适合,还有其他思路吗
首先业务是不是无法改变。如果可以,我觉得你父页面应该有初始化查询事件,父带条件查询所以数据,然后父传子数据渲染子页面。(我们项目都这样搞,见代码)
其次,如果无法改变业务。每个子模块都有调接口,我就觉得你用重载组件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
}
}
8 回答5.8k 阅读✓ 已解决
9 回答9.2k 阅读
6 回答4.7k 阅读✓ 已解决
5 回答3.5k 阅读✓ 已解决
3 回答10.3k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
7 回答9.8k 阅读
给你提供种思路:发布订阅者模式
1、在主页面暴露个定时刷新对象intervelRefreshObj,它就是个普通的对象,里面可以订阅事件,和发布事件;
2、在各个组件引入改对象,把需要刷新数据的接口方法,订阅到该对象;
3、再在主界面,定时触发“定时刷新对象”的发布,即可实现每个组件的实时刷新;