角度2使用'冒用'音频事件发射器与组件本地成员

问题描述:

任何人都可以帮助我如何使用audio.onended()播放播放列表中的下一首歌吗?
我可以将歌曲添加到播放列表,甚至通过传递audioObject以上述方法播放歌曲。但是,当audio.onended发生火灾时,它表示this.playlist.item is undefined角度2使用'冒用'音频事件发射器与组件本地成员

这与我认为的范围有关。
是否有另一种解决方法解决ended()并与此类的成员变量进行交互?

export class ..... { 

    playlist = { 
     item: [] 
    }; 



    playMedia(audioObject) { 
     this.nowPlayingChange.next(audioObject); 
     if (this.audio) { 
      this.audio.src = ''; 
      this.audio.load(); 
     } 
     this.audio = new Audio(); 
     this.audio.src = audioObject.src; 
     this.audio.type = 'audio/mp3'; 
     this.audio.load(); 
     if (!this.audio.error) { 
      this.audio.play(); 
     } 
     this.audio.onended = function() { 
      if (this.playlist.item.length > 1) { 
       for (let i = 0; i < this.playlist.item.length; i++) { 
        if (audioObject.title === this.playlist.item[i].title) { 
         if (i !== (this.playlist.item.length - 1)) 
          this.playMedia(this.playlist[i + 1]); 
        } else { 
         this.audio.pause(); 
        } 
       } 
      } else { 
       this.audio.pause(); 
      } 
     }; 
    } 
} 

使用箭头功能的=>代替function保持this关键字:

this.audio.onended =() => {   
       if(this.playlist.item.length > 1) { 
       for (let i = 0; i < this.playlist.item.length; i++) { 
       if (audioObject.title === this.playlist.item[i].title) { 
        if(i !== (this.playlist.item.length - 1)) 
        this.playMedia(this.playlist[i+1]); 
       } else 
       { 
        this.audio.pause(); 
       } 
       } 
      } else { 
       this.audio.pause(); 
      } 
      };