Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将事件从服务传送到控制器_Javascript_Angularjs_Coffeescript_Angularjs Scope - Fatal编程技术网

Javascript 将事件从服务传送到控制器

Javascript 将事件从服务传送到控制器,javascript,angularjs,coffeescript,angularjs-scope,Javascript,Angularjs,Coffeescript,Angularjs Scope,我的服务中有一个音频元素,它有一个“结束”事件侦听器。我正试图把这个信息传达给一个角度控制器 目前我的服务中有: Audio.addEventListener "ended", (-> $rootScope.$broadcast("audioEnded") ), false 在我的控制器中,我有: $scope.$on "audioEnded", -> console.log("ended scope") 这是可行的,但我想知道是否有更好的方法可以

我的服务中有一个音频元素,它有一个“结束”事件侦听器。我正试图把这个信息传达给一个角度控制器

目前我的服务中有:

Audio.addEventListener "ended", (->
      $rootScope.$broadcast("audioEnded")
    ), false
在我的控制器中,我有:

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

这是可行的,但我想知道是否有更好的方法可以在不使用$rootScope的情况下从服务与控制器通信。实现所需功能的常用方法是将事件聚合器作为服务实现。通过简单的依赖注入,您可以在任何指令、控制器或配置函数中使用它

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'

感觉有点奇怪,这个基础设施不是angular core的一部分$rootScope对控制器很好,但其他方面就不行了。