我的服务中有一个音频元素,它有一个“已结束”的事件监听器。我正在尝试将该消息传达给角度控制器。
目前我的服务中有这个:
Audio.addEventListener "ended", (->
$rootScope.$broadcast("audioEnded")
), false
在我的控制器中,我有:
$scope.$on "audioEnded", ->
console.log("ended scope")
这有效,但我想知道是否有更好的方法从服务通信到控制器而不使用$ rootScope
答案 0 :(得分: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'