Я работаю над проектом angularJS, музыкальным проигрывателем, который может выбрать альбом и затем воспроизвести его из списка песен этого альбома. Все работает, за исключением того, что после воспроизведения песни из альбома (альбом A) и выбора другого альбома (альбом B), когда я пытаюсь выбрать предыдущую / следующую песню на панели проигрывателя, которая отделена от списка, воспроизводятся песни предыдущего альбома (альбом A). Понятно, что-то не обновляется. Я прочитал здесь из комментария Chev , что заводы работают только один раз. Итак, я думаю, что проблема может быть связана с моим контроллером Songplayer (с завода).
Вот код:
AlbumController (контроллер с директивой):
....
$rootscope.getAlbumId = $stateParams.getAlbumId;
this.albumData = Fixtures.getAlbum();
this.songPlayer = SongPlayer;
....
FixturesController (заводская - подача музыкальных файлов):
Fixtures.getAlbum = function(){
var chosenAlbum = $rootScope.getAlbumId
return chosenAlbum
....
};
SongPlayerController (заводская - проигрывание музыки):
....
$rootScope.getAlbumId = $stateParams.getAlbumId;
var currentAlbum = Fixtures.getAlbum();
....
var getSongIndex = function(song){
return currentAlbum.songs.indexOf(song);
};
PlayerBarController:
code same as albumController
Похоже, PlayerBarController не регистрирует новый альбом с фабрики SongPlayer. Я исследовал и пытался использовать $ emit / $ broadcast, $ watch, различные другие обратные вызовы и т. Д. Я знаю, что ответ везде, где я искал, но у меня просто нет угловых навыков, чтобы понять это. Таким образом, любая помощь в виде простого примера кода будет принята с благодарностью.
Кстати, я считаю, что мое использование $ rootScope также довольно слабое, поэтому, если у кого-то есть советы по этому поводу, я был бы признателен. Я использовал $ rootcope и $ stateparams, чтобы захватить и зарегистрировать идентификатор альбома и передать его контроллеру Fixtures.