【问题标题】:Communicating events from a service to a controller in Angular在 Angular 中将事件从服务传递到控制器
【发布时间】:2013-07-29 00:07:34
【问题描述】:

我的服务中有一个音频元素,它有一个“结束”事件侦听器。我正在尝试将该消息传达给角度控制器。

目前我的服务中有这个:

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

在我的控制器中我有:

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

这可行,但我想知道是否有更好的方法可以在不使用 $rootScope 的情况下从服务与控制器进行通信

【问题讨论】:

    标签: javascript angularjs coffeescript angularjs-scope


    【解决方案1】:

    实现您想要的常用方法是将事件聚合器实现为服务。您可以通过简单的依赖注入在任何指令、控制器或配置函数中使用它。

    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'
    

    【讨论】:

    • 这个基础设施不是角核心的一部分,感觉有点奇怪。 $rootScope 适用于控制器,但除此之外就不行了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多