Я бы просто установил его на $ rootScope, а не на некоторую ограниченную область контроллера (предполагая, что у нее есть глобальное приложение, которое кажется вашим звуком).Затем вы должны использовать $ rootScope как своего рода услуг или сделать услугу, чтобы сделать то, что вы хотите
В CoffeeScript (потому что я ленив как это)
app/app.module.coffee
angular.module 'myApp', []
app/app.run.coffee
angular.module 'myApp'
.run ['$rootScope', ($rootScope) ->
# Do your initialization here and perhaps set a flag on the rootScope
$rootScope.deviceReady = true # for example once you know it is ready
$rootScope.$broadcast("device:ready")
]
app/some-useful.controller.coffee
angular.module 'myApp'
.controller SomeUsefulController, ['$scope', '$rootScope', ($scope, $rootScope) ->
$rootScope.$on('device:ready', ->
#do what you want knowing device is ready
)
]
Другой подход, если вам нужно было бы сделать это наоборот и испустить событие от контроллера, а слушатель будет глобальным в app.run. В этом случае вы просто транслируете, когда все готово в контроллере на $ rootScope, и пусть слушатели в глобальном пространстве приложения справятся с этим.
app/app.run.coffee
angular.module 'myApp'
.run ['$rootScope', ($rootScope) ->
$rootScope.$on("device:ready", ->
alert("Device is ready")
)
]
app/some-useful.controller.coffee
angular.module 'myApp'
.controller 'SomeUsefulController', ['$scope', '$rootScope', ($scope, $rootScope) ->
$scope.someFunction = ->
# do something useful as you like
$rootScope.$broadcast('device:ready')
]
Я не знаю достаточно о вашем конкретном случае использования, чтобы дать вам прямой ответ, но это те принципы, которые я нашел, чтобы получить большее гибкость, а не использование наследования Prototypal controller, которое, как правило, делает ваше приложение все более и более хрупким с течением времени.
Конечным подходом было бы использовать директиву, которая инкапсулирует вашу логику, которую вы затем можете просто вставить в любую область контроля.
Эй, Алексей, я встретил это решение ранее этим вечером, но я все время получаю сообщение об ошибке, я отредактировал вопрос, чтобы дать дополнительную информацию. – morrisstu
Привет, посмотри, я отредактировал ответ. – alexey