2013-07-28 87 views
3

我的服務中有一個「結束」事件監聽器中的音頻元素。我試圖將這個消息傳達給角度控制器。將服務中的事件通過角度傳遞給控制器​​

目前我有這在我的服務:

Audio.addEventListener "ended", (-> 
     $rootScope.$broadcast("audioEnded") 
    ), false 

而在我的控制,我有:

$scope.$on "audioEnded", -> 
     console.log("ended scope") 

這工作,但我不知道是否有來自通信的更好的方法服務到控制器而不使用$ rootScope

回答

3

實現您想要的通用方法是將事件聚合器實現爲服務。你可以通過簡單的依賴注入在任何指令,控制器或配置函數中使用它。

app.service 'vent', -> 
    handlers: [] 
    on: (eventName, handler) -> 
     #register handler 
    emit: (eventName, args...) -> 
     #iterate events and call registered handlers 

使用例如:

app.controller 'Ctrl', (vent) -> 
    vent.on 'eventname', -> 
     #... 
    vent.emit 'eventname' 
+1

感覺有點奇怪,這基礎設施不是角核心的一部分。 $ rootScope對控制器工作正常,但沒有其他許多。 –

相關問題