角度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();
}
};