为什么不能在 生命周期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()所修改

1
0

纯正商业级微信小程序应用实战,全方位小程序特性讲解

真实数据的高质量小程序项目,学会直接工作

4782 学习 · 2125 问题

查看课程