为什么不能在 生命周期attatched 中去掉 this._recoverStatus()
来源:10-12 用简洁的代码优化音乐播放

慕运维2471188
2018-11-12
记得老师说过:Component的生命周期函数attached的作用,相当于页面Page({})中的onLoad
可能是我对attatched的特性掌握的还不好
我的疑问是:
在执行this._monitorSwitch()的时候,不是也执行了this._recoverStatus()吗?
在去掉this._recoverStatus()后,点击音乐页面的播放图标,音乐开始播放,然后来回切换navi导航再回到音乐页面,播放图标就恢复成了data里默认的playing值false
通过console发现现’testPlayingPause’和’testPlayingPlay’并未被打印
不去掉this._recoverStatus()时,则一切正常
attached: function(event){
this._recoverStatus() //❤️问题点:这一行代码为什么不能去掉
this._monitorSwitch()
},
methods: {
onPlay: function(event){
if(!this.data.playing){
this.setData({
playing: true
})
mMgr.src = this.properties.src
}
else{
this.setData({
playing: false
})
mMgr.pause()
}
},
_recoverStatus: function(){
if(mMgr.paused){
this.setData({
playing: false
})
console.log('testPlayingPause')
return
}
if(mMgr.src == this.properties.src){
this.setData({
playing: true
})
console.log('testPlayingPlay')
}
},
_monitorSwitch: function(){
mMgr.onPlay(()=> {
this._recoverStatus()
console.log('testOnPlay')
}),
mMgr.onPause(()=> {
this._recoverStatus()
console.log('testOnPause')
}),
mMgr.onStop(()=> {
this._recoverStatus()
}),
mMgr.onEnded(()=> {
this._recoverStatus()
})
}
}
写回答
1回答
-
慕运维2471188
提问者
2018-11-12
:)自己想明白了
来回切换navi导航再回到音乐页面时,【监听背景音频播放事件】并没有发生,this._monitorSwitch()
自然也不会执行this._recoverStatus(),除非人为点击播放图标所以不能在生命周期函数attatched中去掉this._recoverStatus(),不然在重新加载音乐组件时,其data里playing的初始值不会被this._recoverStatus()所修改
10
相似问题