重构$ rootScope。$ apply in Angular

时间:2016-02-07 05:11:38

标签: javascript angularjs

我的MusicPlayer.js Angular服务在$rootScope.$apply中包含一个回调函数,用于更新特定对象(musicPlayer.currentPlaybackTime)并与所有其他控制器共享(通过应用于$rootScope )。

我理解您理想情况下要限制任何$rootScope污染,所以我正在考虑可能的重构选项,这些选项会将调用apply方法转移到$rootScope,但允许共享更新后的对象跨多个控制器。

我的研究表明,我需要注册需要我PlayerDashboardCtrl.js对象的其他控制器(即PlaylistCtrl.jsAlbumListCtrl.jscurrentPlaybackTime),但我会想了解什么是最有效的方法。

谢谢。

 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;
};

1 个答案:

答案 0 :(得分:1)

在控制器之间共享数据的最佳方法是制作service/factory并使用这些服务从您想要的任何控制器获取数据。您需要在要访问它们的所有控制器中inject使用此服务。

此egghead视频将让您清楚地了解:Share data between controllers

Stackoverflow问题类似于:Stackoverflow answers to sharing data between controllers.

现场演示:Fiddle to show data sharing.