У меня есть эта услуга.
playerhandler.ts
import { Observable,of,Subject } from 'rxjs';
import { PlayerService } from "./../../core/services/player.service";
import { Injectable } from "@angular/core";
import { DeezerService } from "../services/deezer.service";
import { Track } from "../models/Track";
@Injectable({
providedIn: "root"
})
export class PlayerHanlder {
isPlaying: boolean = false;
index: number;
constructor(
private playerService: PlayerService,
private deezer: DeezerService
) { }
initTracks(tracks): void {
this.playerService.init(tracks);
}
play() {
this.isPlaying = true;
this.playerService.play();
}
pause() {
this.playerService.pause();
}
stop() {
this.playerService.stop();
}
next() {
this.playerService.playNext();
}
previous() {
this.playerService.playPrevious();
}
playing(playing) {
this.isPlaying = playing;
}
onEnd() {
this.playerService.playNext();
}
start(album) {
if (this.isPlaying) this.stop();
this.deezer.getTrackList(album.tracklist)
.subscribe((tracks: Track[]) => {
this.initTracks(tracks);
this.playerService.index = 0;
this.play();
});
}
startSelectedTrack(tracks,trackIndex) {
if (this.isPlaying) this.stop();
this.initTracks(tracks);
this.playerService.playNew(trackIndex);
this.isPlaying = true;
}
}
Метод initTracks(tracks)
получает свежие данные каждый раз, когда пользователь щелкает, чтобы воспроизвести альбом, или щелкает, чтобы воспроизвести конкретную дорожку. Это можно увидеть в двух последних методах. Теперь у меня есть queue component
, который должен получать данные tracks
, которые передаются в метод initTracks(tracks)
, так что текущий список воспроизведения треков будет показан в queue component
. Вот где у меня проблема с реализацией. Я попытался создать наблюдаемое из треков, используя of(tracks)
в методе initTracks
. Это не сработало. Я также пробовал использовать Subject
, чтобы на треки можно было как подписываться, так и подписываться, но это тоже не сработало. Пожалуйста, как мне получить свежие данные, отправленные в метод initTracks(tracks)
, в компонент очереди? Спасибо.
Если необходимо, это текущий исходный код. исходный код
Пожалуйста, используйте ReplaySubject и сообщите, если помогло. Можете ли вы опубликовать пример кода, в котором вы отправляете данные и подписываетесь?
Пожалуйста, сделайте следующее: 1. Убедитесь, что в initTracks console.info (треки) они существуют. 2. измените this.playerHanlder.tracks $ .subscribe (t => console.info (t)) на this.playerHanlder.tracks $ .subscribe (t => console.info (t), er => console.info (er )). Может у вас ошибка.
Следы действительно существуют. Когда я вхожу в консоль с помощью метода initTracks(tracks)
, я вижу треки в консоли. Проблема в том, что они не отображаются в queue component
, когда я подписываюсь. Кроме того, я просто попытался добавить второй метод в функцию подписки (er => console.info(er)
), но ошибок не было. Когда я нажимаю кнопку, в консоли ничего не отображается.
не могли бы вы опубликовать код в stackblitz. Другой проблемы не вижу.
Это исходный код github.com/alfmoh/waless-spa. Я попытался поместить его в stackbliz, но получил много ошибок, из-за которых не удалось найти файлы стилей.
Не сработало. Реализация, которую я использовал для
ReplaySubject
, одинакова для наблюдаемыхSubject
иof
. Может я не так делаю. Это реализация. pastebin.com/cxer5zXM