簡體   English   中英

重構$ rootScope。$在Angular中應用

[英]refactoring $rootScope.$apply in Angular

我的MusicPlayer.js Angular服務在$rootScope.$apply中包裝了一個回調函數, $rootScope.$apply更新特定對象( musicPlayer.currentPlaybackTime ),並與所有其他控制器共享(通過應用到$rootScope )。

我了解您理想情況下希望限制$rootScope污染,因此我正在尋找可能的重構選項,這些選項可以消除對$rootScope調用apply方法,但允許我的更新對象在多個控制器之間共享。

我的研究表明,我需要注冊需要currentPlaybackTime對象的其他控制器(即PlayerDashboardCtrl.jsPlaylistCtrl.jsAlbumListCtrl.js ),但我想了解執行此操作的最有效方法。

謝謝。

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

在控制器之間共享數據的最佳方法是建立service/factory並從所需的任何控制器中使用這些服務獲取數據。 您將必須在要訪問它們的所有控制器中inject此服務。

這個簡單的視頻將使您有一個清晰的了解: 在控制器之間共享數據

與此類似的Stackoverflow問題: Stackoverflow回答了在控制器之間共享數據的問題。

現場演示: 顯示數據共享的小提琴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM