首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Angular中重构$rootScope.$apply

问在Angular中重构$rootScope.$apply
EN

Stack Overflow用户
提问于 2016-02-07 13:11:38
回答 1查看 128关注 0票数 1

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

我知道理想情况下您会希望限制任何$rootScope污染,因此我正在研究可能的重构选项,这些选项取消了对$rootScope调用apply方法,但允许在多个控制器之间共享更新后的对象。

我的研究表明,我需要注册需要我的currentPlaybackTime对象的其他控制器(即PlayerDashboardCtrl.js、PlaylistCtrl.js和AlbumListCtrl.js),但我想知道做这件事最有效的方法是什么。

谢谢。

代码语言:javascript
复制
 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;
};
EN

回答 1

Stack Overflow用户

发布于 2016-02-07 14:14:22

在控制器之间共享数据的最好方法是创建一个service/factory,并使用这些服务从您想要的任何控制器获取数据。您必须在想要访问的所有控制器中对此服务执行inject操作。

这个书呆子的视频会让你有一个清晰的理解:Share data between controllers

与此类似的堆栈溢出问题:Stackoverflow answers to sharing data between controllers.

现场演示:Fiddle to show data sharing.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35249984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档