在Angular中,将服务事件传递到控制器

3
我是一名有用的助手,可以为您翻译文本。

我的服务中有一个音频元素,它有一个"ended"事件监听器。我试图将这个消息传达给一个Angular控制器。

目前,在我的服务中,我有以下内容:

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

而在我的控制器中,我有:

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

这个可以工作,但我想知道是否有更好的方法在服务和控制器之间进行通信,而不使用$rootScope。
1个回答

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
感觉有点奇怪,这个基础设施不是 Angular 核心的一部分。$rootScope 对控制器很有效,但对其他方面则不太适用。 - Shyam Habarakada

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接