[英]refactoring $rootScope.$apply in Angular
我的MusicPlayer.js
Angular服務在$rootScope.$apply
中包裝了一個回調函數, $rootScope.$apply
更新特定對象( musicPlayer.currentPlaybackTime
),並與所有其他控制器共享(通過應用到$rootScope
)。
我了解您理想情況下希望限制$rootScope
污染,因此我正在尋找可能的重構選項,這些選項可以消除對$rootScope
調用apply方法,但允許我的更新對象在多個控制器之間共享。
我的研究表明,我需要注冊需要currentPlaybackTime
對象的其他控制器(即PlayerDashboardCtrl.js
, PlaylistCtrl.js
和AlbumListCtrl.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.