判断浏览器处于活动可见状态就刷新数据
ngOnInit() {
//页面初始化时加载数据
this.loadData()
window.addEventListener('visibilitychange', () => {
if ('visible' === document.visibilityState) {
//当浏览器标签页处于可见状态,重新加载数据
this.loadData()
}
})
}
参考地址
https://developer.mozilla.org/zh-CN/docs/Web/API/Document/visibilityState
Document.visibilityState (只读属性), 返回document的可见性, 即当前可见元素的上下文环境. 由此可以知道当前文档(即为页面)是在背后, 或是不可见的隐藏的标签页,或者(正在)预渲染.可用的值如下:
‘visible’ : 此时页面内容至少是部分可见. 即此页面在前景标签页中,并且窗口没有最小化.
‘hidden’ : 此时页面对用户不可见. 即文档处于背景标签页或者窗口处于最小化状态,或者操作系统正处于 ‘锁屏状态’ .
‘prerender’ : 页面此时正在渲染中, 因此是不可见的 (considered hidden for purposes of document.hidden). 文档只能从此状态开始,永远不能从其他值变为此状态.注意: 浏览器支持是可选的.
当此属性的值改变时, 会递交 visibilitychange (en-US) 事件给Document.
典型用法是防止当页面正在渲染时加载资源, 或者当页面在背景中或窗口最小化时禁止某些活动.
定时刷新
time = 10
finalFlushTime = 10
ngOnInit() {
//当this.getRunCategory传递参数为1时,调用this.getRunningData(this.owner, this.category[0].id)
//参数为2时调用this.getRunningData(this.owner, this.category[this.categoryIndex].id)
//具体写法见getRunCategory()方法
this.getRunCategory('1')
window.addEventListener('visibilitychange', () => {
if ('visible' === document.visibilityState) {
this.getUserId()
this.getRunCategory('2')
}
})
this.countTime()
}
//
countTime() {
if (this.time == 0) {
this.getRunCategory('2');
}
this.time = this.time == 0 ? this.finalFlushTime : this.time;
this.time -= 1;
setTimeout(() => {
this.countTime()
}, 1000)
}
//获取任务分类
getRunCategory(timeRefresh) {
this.service.getRunningCategory().subscribe(res => {
//console.log('任务分类', res)
if (res.length == 0) {
this.hasdata = false
return
} else {
this.hasdata = true
this.category = res.filter(item => {
return item.isDetail !== false
}).map(item => {
return item
})
//当this.getRunCategory传递参数为1时,调用this.getRunningData(this.owner, this.category[0].id)
//参数为2时调用this.getRunningData(this.owner, this.category[this.categoryIndex].id)
if (timeRefresh == '1') {
this.getRunningData(this.owner, this.category[0].id)
}else if(timeRefresh == '2'){
this.getRunningData(this.owner, this.category[this.categoryIndex].id)
}
}
this.cd.markForCheck()
})
}