我的MusicPlayer.js
Angular服务在$rootScope.$apply
中包含一个回调函数,用于更新特定对象(musicPlayer.currentPlaybackTime
)并与所有其他控制器共享(通过应用于$rootScope
)。
我理解您理想情况下要限制任何$rootScope
污染,所以我正在考虑可能的重构选项,这些选项会将调用apply方法转移到$rootScope
,但允许共享更新后的对象跨多个控制器。
我的研究表明,我需要注册需要我PlayerDashboardCtrl.js
对象的其他控制器(即PlaylistCtrl.js
,AlbumListCtrl.js
和currentPlaybackTime
),但我会想了解什么是最有效的方法。
谢谢。
var setSong = function(song) {
currentBuzzObject = new buzz.sound(song.audioUrl, {
formats: ['mp3'],
preload: true
});
currentBuzzObject.bind('timeupdate', function() {
$rootScope.$apply(function() {
musicPlayer.currentPlaybackTime = currentBuzzObject.getTime();
});
});
musicPlayer.currentSong = song;
};
答案 0 :(得分:1)
在控制器之间共享数据的最佳方法是制作service/factory
并使用这些服务从您想要的任何控制器获取数据。您需要在要访问它们的所有控制器中inject
使用此服务。
此egghead视频将让您清楚地了解:Share data between controllers
Stackoverflow问题类似于:Stackoverflow answers to sharing data between controllers.