Задать вопрос
@Artem0071
Безработный mr. Junior

Как использовать функцию внутри функции внутри класса?

Добрый день!

Есть сервис в ангуляре (чтобы музыку слушать).
вот он:
export class PlayService {
    private audios = [];
    private nowPlaying = 0;
    private player = new Audio();

    public addAudios(data, nowPlaying){
        this.audios = [];
        this.audios = data;
        this.nowPlaying = nowPlaying;
        console.log('End sending');

        console.log('Start audio file');
        this.player.src = 'src/files/'+this.audios[nowPlaying]['file'];
        this.player.play();

        this.player.addEventListener('ended', function (){
            this.nextSong(); // вот здесь ругается
            console.log('Audio file ended');
        });
    }
    public nextSong(){
        console.log('Start next audio file');
        this.nowPlaying++;
        this.player.src = 'src/files/'+this.audios[this.nowPlaying]['file'];
        this.player.play();
    }
}


Сама музыка работает, но не работает переключение по окончанию
Ругается на this.nextSong();. Вот не понимаю я что тут не так.. пробовал и без this и пробовал self
все не работает.. В чем дело может быть?
  • Вопрос задан
  • 316 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
Стрелочные функции вроде для этого как раз, чтобы this пробрасывать.
Вот так не работает?
this.player.addEventListener('ended', () => {
            this.nextSong();
            console.log('Audio file ended');
        });
Ответ написан
Ivanq
@Ivanq
Знаю php, js, html, css
А точно с self правильно пробовали?
var self = this;
this.player.addEventListener('ended', function (){
            self.nextSong();
            console.log('Audio file ended');
        });

Должно работать. Но, честно говоря, так теперь мужики не пишут. Не по-ES6'овски! Надо писать так:
this.player.addEventListener('ended', () => {
            this.nextSong();
            console.log('Audio file ended');
        });
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы